Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将Web API 2 HttpRequestMessage序列化到我的自定义对象中_C#_Asp.net Web Api - Fatal编程技术网

C# 如何将Web API 2 HttpRequestMessage序列化到我的自定义对象中

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; } } 我

在我的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反序列化到测试类的新实例中,正如上面第一条评论所提到的。我建议调查一下。然后你可以做一些类似的事情:

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)