C# 如何将Web API 2 HttpRequestMessage序列化到我的自定义对象中
在我的WebAPI 2项目中有以下方法C# 如何将Web API 2 HttpRequestMessage序列化到我的自定义对象中,c#,asp.net-web-api,C#,Asp.net Web Api,在我的WebAPI 2项目中有以下方法 public class TestController : ApiController { [HttpPost] public void Test(HttpRequestMessage request) { var content = request.Content; string jsonContent = content.ReadAsStringAsync().Result; } } 我
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反序列化到测试类的新实例中,正如上面第一条评论所提到的。我建议调查一下。然后你可以做一些类似的事情:
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...
}
}
公共类TestController:ApiController
{
[HttpPost]
公共无效测试(HttpRequestMessage请求)
{
var content=request.content;
字符串jsonContent=content.ReadAsStringAsync().Result;
测试=新测试();
test=JsonConvert.DeserializeObject(jsonContent);
//做验证工作。。。
}
}
您可以在操作方法中使用如下参数
[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将使用请求体流。因此,您将无法像正在做的那样在action方法中读取它。为了确保我理解您的问题,您想知道如何将jsonContent变量反序列化到测试类中?我的问题是,我应该将HttpRequestMessage作为参数传递,还是传递类似对象的测试(Test oTest),如果我使用测试参数,这是首选方法,还是使用HttpRequestMessage和HttpRequestMessage的内容更好?有多种方法可以做到这一点,您必须选择适合自己的方法。通常,绑定到自定义类型具有优势。例如,无论内容类型如何,web api都会将请求主体绑定到参数。如果手动读取正文,则必须自己手动反序列化。对于大多数场景,这是有用的。此外,动作方法的单元测试相对来说比使用HttpRequestMessage
更容易。
[HttpPost]
public void Test(Test oTest)