我有一个
public void Post([FromBody]Record value)
- 我可以用一些json从fiddler调用的方法。
使用具有相同json的WizTools RESTClient 3.1从我的mac调用方法时,value
始终为null
。看起来它没有得到解析或其他东西。
我在两台机器上都使用Content-Type: application/json
,并且我已经仔细检查了Request.Content
对象是Visual Studio调试器中的标头。
如果我使用一个只有2个属性的简单对象:
public class Test123 {
public string name { get; set; }
public int age { get; set; }
}
public void Post([FromBody]Test123 value)
我可以从fiddler和mac调用它,value
永远不会为空。
关于如何调试这个的任何提示?有没有办法让我看到从我的mac发送到我的电脑上的iis / visual studio的原始响应?它不会出现在小提琴手中。
答案 0 :(得分:7)
对于您的操作方法,如果您发送的请求包含Content-Type: application/json
且请求邮件正文为{"name":"john", "age":20}
,则应正确绑定。顺便说一句,您不需要使用[FromBody]
,因为Test123
是一个复杂的类型。
无论如何,您可以通过添加这样的消息处理程序来查看原始请求消息。
public class MyHandler : DelegatingHandler
{
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request,
CancellationToken token)
{
HttpMessageContent requestContent = new HttpMessageContent(request);
string requestMessage = requestContent.ReadAsStringAsync().Result;
return await base.SendAsync(request, token);
}
}
在config.MessageHandlers.Add(new MyHandler());
WebApiConfig.cs
方法中添加此Register
处理程序。原始请求将位于requestMessage
变量中。你可以通过在调试时打破那里来检查或写入跟踪等等。
答案 1 :(得分:0)
我认为您必须在http标头请求中通知content-type
。例如,如果您想传递json
格式,请在标题中添加:
Content-Type: application/json
在身体中:
{ name: "John", Age: 20 }
您将通过asp.net mvc web api的模型绑定器创建Test123对象。
我喜欢使用Fiddler
软件手动发出请求,您还可以看到原始请求/响应,使用任何http动词创建请求等。
答案 2 :(得分:0)