我有一個C#WebAPI(我是web API的新手),它可以正常工作,因爲我可以執行GET & Postman和另一個使用HttpClient的C#程序的POST請求。將JSON嵌套對象傳遞到Post()方法 - C#WebAPI
POST方法是「工作」,因爲我把一個斷點放入它來檢查它是否在我發送POST請求時觸發它的代碼。
「另一個C#程序」負責從數據庫中讀取一些數據,將其序列化(使用JSON.Net)&將其發送到Web API。
在Web API中,我想使用JSON序列化對象(其中包含嵌套對象)來重建序列化和發送之前所具有的同一個對象。每個用於創建此對象的類都存在於webAPI程序中。
我認爲我只需要接收JSON字符串,然後將其反序列化到我的對象,但我不會獲得這個字符串,而是將'null'作爲post參數。
我的代碼:
的WebAPI配置
public static class SHPC_APIConfig
{
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "ShPcAPI",
routeTemplate: "api/{controller}/{id}",
defaults: new {id = RouteParameter.Optional}
);
// Configure JSON formatter
var jsonFormatter = config.Formatters.JsonFormatter;
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
}
}
控制器
public class DataController : ApiController
{
public string Get()
{
return "Hello world!";
}
public HttpResponseMessage Post([FromBody] string value)
{
var data = JsonConvert.DeserializeObject<Data>(value);
Console.WriteLine(value != string.Empty ? "OK" : "KO");
return new HttpResponseMessage(HttpStatusCode.OK);
}
}
執行GET請求的作品,我得到我期望的答案。無論我從Postman還是從其他C#程序請求。
但是,當我嘗試執行POST請求時,請求的參數值始終爲空,無論我要求從Postman還是從我的其他C#程序。
只需使用正確的類型作爲參數即可。 JSON反序列化應該作爲框架的一部分發生。另外,如果可能的話使用WebApi 2,使用屬性方法定義路由而不是在config中註冊路由更好。 –
@DarrenYoung當你說出正確的類型時,你是在談論我想將JSON反序列化的類型「數據」?如果是這樣,我已經試圖期望數據作爲Post()方法的參數而不是字符串,但是它將Data對象設置爲所有默認值/空值... – Arnaud