3

我有一个

public void Post([FromBody]Record value)

-我可以用一些 json 从提琴手调用的方法。

当使用具有相同 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 发送到我的 PC 上的 iis/visual studio 的原始响应?它不会出现在提琴手中。

4

3 回答 3

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可变的。您可以通过在调试时打破那里进行检查或写入跟踪等。

于 2013-07-12T12:38:00.480 回答
0

我认为您必须通知content-typehttp 标头请求。例如,如果要传递json格式,则必须在标题中添加:

Content-Type: application/json

在正文中:

{ name: "John", Age: 20 }

您将获得由 asp.net mvc web api 的模型绑定器创建的 Test123 对象。

我喜欢使用Fiddler软件手动发出请求,您还可以查看原始请求/响应,使用任何 http 动词创建请求等。

于 2013-07-12T11:32:41.163 回答
0

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

以下是输出日志的样子:

在此处输入图像描述

要启用此功能:

  1. 开始 -> 运行 -> 输入“inetmgr” [这将打开 IIS 管理 UI]
  2. 在服务器级别启用 FTW 并添加规则 在此处输入图像描述
  3. 添加规则(您可以添加 HTTP 200 代码作为过滤器以跟踪成功的请求,或添加一些其他代码 - 您认为合适)在此处输入图像描述
  4. 最后一步 - 我保证 - 每个站点都需要“选择加入”此功能在此处输入图像描述

就是这样..现在做你的事情并转到包含日志的文件夹,按时间排序。您应该会看到在测试期间创建的新日志条目。

祝你好运!!!

于 2017-06-13T12:17:59.967 回答