我有一个C#WebAPI(我是Web API的新手),它可以很好地工作,因为我可以执行GET&使用HttpClient从Postman和另一个C#程序发出POST请求。
POST方法是"工作"因为我在其中放入一个断点来检查它是否在我发送POST请求时触发了它的代码,它就是。
另一个C#计划"负责从数据库读取一些数据,将其序列化(使用JSON.Net)&将其发送到网络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请求时,请求的参数值始终为null,无论我从Postman还是从其他C#程序请求。
答案 0 :(得分:2)
在你的WebApiConfig文件中进入App_Start尝试把它放在Register函数中:
var settings =
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings;
这将序列化json中的所有响应。