1

我已通读此线程,但没有一个答案能够解决我的问题。

我正在尝试将一个简单的 POCO 发布到 .Net Web API 控制器,但无论正文中有什么,参数始终是默认对象,从未填充。

我的 SimplePOCO 对象:

[Serializable]
public class SimplePOCO
{
    public SimplePOCO() {}
    public int MyProperty { get; set; }
    public string MyProperty2 { get; set; }
}

我正在使用 RestSharp 客户端使用以下代码发布到控制器:

public void PostSimplePOCO(SimplePOCO simplePOCO)
{
    var request = new RestRequest("api/Warehouse/SimplePOCO", Method.POST);
    request.AddJsonBody(simplePOCO);
    IRestResponse response = Execute(request);
}

我的 Api 控制器方法:

[HttpPost]
[Route("api/Warehouse/SimplePOCO")]
public void ImportPOCO([FromBody]SimplePOCO simplePOCO)
{
    using (var stream = new MemoryStream())
    {
        var context = (HttpContextBase)Request.Properties["MS_HttpContext"];
        context.Request.InputStream.Seek(0, SeekOrigin.Begin);
        context.Request.InputStream.CopyTo(stream);
        string requestBody = Encoding.UTF8.GetString(stream.ToArray());
    }
}

我尝试过使用和不使用 [FromBody] 属性。我也尝试使用 JObject 类型作为参数,然后我可以成功地反序列化为 SimplePoco 对象。如果我检查 requestBody 我可以看到收到的 JSON 是有效的,如下所示:

{"MyProperty":2,"MyProperty2":"Test string"}

此外,我打开了诊断日志,输出窗口显示模型有效:

w3wp.exe 信息:0:请求,方法=POST,Url= http://lewis-10:8765/api/Warehouse/SimplePOCO,消息=' http://lewis-10:8765/api/Warehouse/SimplePOCO' w3wp.exe 信息:0:Message='Warehouse',Operation=DefaultHttpControllerSelector.SelectController w3wp.exe 信息:0:Message='DMHWebAPI.Controllers.WarehouseController',Operation=DefaultHttpControllerActivator.Create w3wp.exe 信息:0:Message= 'DMHWebAPI.Controllers.WarehouseController',Operation=HttpControllerDescriptor.CreateController w3wp.exe 信息:0:Message='选择操作'ImportPOCO(SimplePOCO simplePOCO)'',Operation=ApiControllerActionSelector.SelectAction w3wp.exe 信息:0:Message='The身份验证过滤器成功地将主体设置为已知身份。身份。名称=''。Identity.AuthenticationType='Bearer'.', Operation=HostAuthenticationFilter.AuthenticateAsync w3wp.exe 信息:0:模型状态有效。值:simplePOCO=DMH.DTO.Upload.SimplePOCO',Operation=HttpActionBinding.ExecuteBindingAsync

原始提琴手请求参考:

POST http://lewis-10:8765/api/Warehouse/SimplePOCO HTTP/1.1
Authorization: Bearer <redacted>
Accept: application/json, text/json, text/x-json, text/javascript, application/xml, text/xml
User-Agent: RestSharp/106.6.10.0
Content-Type: application/json
Host: <redacted>
Content-Length: 44
Accept-Encoding: gzip, deflate

{"MyProperty":2,"MyProperty2":"Test string"}
4

0 回答 0