我的WebAPI 2项目中有以下方法。
public class TestController : ApiController
{
[HttpPost]
public void Test(HttpRequestMessage request)
{
var content = request.Content;
string jsonContent = content.ReadAsStringAsync().Result;
}
}
我的自定义对象看起来像这样;
public class Test
{
public int Id { get; set; }
public string Name { get; set; }
}
如果我发布一些样本数据,如
<Test>
<Id>12345</Id>
<Name>My Name</Name>
</Test>
jsonContent中的结果值是正确的。我的问题是我应该如何最好地将HttpRequestMessage(内容)序列化到我的对象Test中,以便我可以执行其他验证/任务等。
我应该将HttpRequestMessage传递给方法还是可以传递类似
的内容public void Test(Test oTest)
答案 0 :(得分:6)
听起来你正在问如何将jsonContent反序列化为Test类的新实例,正如上面提到的第一条评论。我建议调查一下Json.NET。然后你可以做类似的事情:
public class TestController : ApiController
{
[HttpPost]
public void Test(HttpRequestMessage request)
{
var content = request.Content;
string jsonContent = content.ReadAsStringAsync().Result;
Test test = new Test();
test = JsonConvert.DeserializeObject<Test>(jsonContent);
//Do validation stuff...
}
}
答案 1 :(得分:1)
您可以在动作方法中使用这样的参数。
[HttpPost]
public void Test(Test oTest)
ASP.NET Web API会将请求消息正文(JSON或XML)反序列化为Test
。根据请求中的内容类型标头,Web API可以处理开箱即用的JSON和XML内容。对于XML,Web API默认使用DCS。您在帖子中显示的XML不会按原样反序列化。尝试返回一个Test
对象,看看它是如何通过Web API序列化的,并在POST请求中使用相同的XML来使绑定正常工作。
顺便说一句,如果在操作方法中使用Test
参数,Web API将使用请求正文流。所以,你将无法在动作方法中阅读它,就像你正在做的那样。