.NET WebApi查看原始请求

时间:2013-07-12 11:28:59

标签: asp.net-web-api

我有一个

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的原始响应?它不会出现在小提琴手中。

3 个答案:

答案 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)

IIS上有一个名为“失败请求跟踪”的功能(不是IIS Express或Kestrel)。此功能将显示通过筛选条件的任何请求/响应周期的详细日志。

以下是输出日志的内容:

enter image description here

启用此功能:

  1. 开始 - &gt;运行 - &gt;键入“inetmgr” [这将打开IIS管理UI]
  2. 在服务器级启用FTW并添加规则 enter image description here
  3. 添加规则(您可以添加HTTP 200代码作为过滤器以跟踪成功请求或其他一些代码 - 如您所见)enter image description here
  4. 最后一步 - 我保证 - 每个网站都需要“选择加入”此功能 enter image description here
  5. 多数民众赞成...现在做你的事情并转到带有日志的文件夹,按时间排序。您应该看到在测试时创建的新日志条目。

    祝你好运!!!