Asp.net web api .NET WebApi请参阅原始请求
我有一个Asp.net web api .NET WebApi请参阅原始请求,asp.net-web-api,Asp.net Web Api,我有一个 public void Post([FromBody]Record value) -方法,我可以使用一些json从fiddler调用它 使用WizTools RESTClient 3.1和相同的json从我的mac调用该方法时,值总是null。它看起来好像没有被解析或者什么的 我在两台机器上都使用了Content-Type:application/json,并且我已经在VisualStudio调试器中仔细检查了Request.Content对象是否为头 如果我使用一个只有两个属性的简
public void Post([FromBody]Record value)
-方法,我可以使用一些json从fiddler调用它
使用WizTools RESTClient 3.1和相同的json从我的mac调用该方法时,值总是null
。它看起来好像没有被解析或者什么的
我在两台机器上都使用了Content-Type:application/json
,并且我已经在VisualStudio调试器中仔细检查了Request.Content
对象是否为头
如果我使用一个只有两个属性的简单对象,如下所示:
public class Test123 {
public string name { get; set; }
public int age { get; set; }
}
public void Post([FromBody]Test123 value)
我可以从fiddler和mac上调用它,值
从不为空
那么,关于如何调试它有什么提示吗?例如,是否有任何方法可以让我在PC上查看从mac发送到iis/visual studio的原始响应?它不会出现在fiddler中。我认为您必须在http头请求中通知内容类型。对于示例,如果要传递json
格式,则必须在标题中添加:
内容类型:应用程序/json
在身体里:
{ name: "John", Age: 20 }
您将获得由asp.net mvc web api的模型绑定器创建的Test123对象
我喜欢使用软件手动发出请求,您还可以看到原始请求/响应,使用任何http动词创建请求,等等。对于您的操作方法,如果您发送的请求内容类型为内容类型: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);
}
}
公共类MyHandler:DelegatingHandler
{
受保护的覆盖异步任务SendAsync(
HttpRequestMessage请求,
取消令牌(令牌)
{
HttpMessageContent requestContent=新的HttpMessageContent(请求);
字符串requestMessage=requestContent.ReadAsStringAsync().Result;
返回wait base.sendaync(请求、令牌);
}
}
像下面这样添加处理程序config.MessageHandlers.Add(newmyhandler())代码>在WebApiConfig.cs
寄存器中
方法。原始请求将位于requestMessage
变量中。您可以在调试或写入跟踪等过程中断开此处进行检查。IIS(不是IIS Express或Kestrel)上有一个名为“失败的请求跟踪”的功能。此功能将向您显示通过筛选条件的任何请求/响应周期的详细日志
以下是输出日志的外观:
要启用此功能:
开始->运行->键入“inetmgr”[这将打开IIS管理UI]
在服务器级别启用FTW并添加规则
添加规则(您可以添加HTTP 200代码作为筛选器来跟踪成功的请求,或者添加一些其他代码-如您所见)
最后一步-我保证-每个网站都需要“选择加入”此功能
就这样。。现在做你自己的事情,去文件夹与日志,按时间排序。您应该会看到在测试期间创建的新日志条目
祝你好运 在Mac上,您可以使用Charles Proxy调试http(相当于Fiddler),只需添加request.Content=newStringContent(requestMessage.Substring(requestMessage.IndexOf(“{”)),Encoding.UTF8,“application/json”);这样就不会干扰正在进行的链。