我已通读此线程,但没有一个答案能够解决我的问题。
我正在尝试将一个简单的 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"}