2013-07-12 47 views
3

我有一個.NET的WebAPI看到原始的請求

public void Post([FromBody]Record value) 

- 方法,我可以從小提琴手一些JSON調用。

當使用WizTools RESTClient 3.1使用相同的json從我的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) 

我可以從兩個小提琴手和MAC調用它和value永遠不能爲null。

那麼關於如何調試的任何提示呢?例如有什麼方法可以讓我在PC上看到從我的Mac發送到iis/visual studio的原始響應?它不會在小提琴手中出現。

+0

在Mac上,您可以使用Charles Proxy來調試http(相當於Fiddler) – bryanmac

回答

0

我想你必須通知content-type關於http頭的請求​​。對於樣本,如果你想傳遞一個json格式,在標題中必須添加:

Content-Type: application/json

和身體:

{ name: "John", Age: 20 } 

您將得到Test123對象被創建asp.net mvc web api的模型綁定器。

我喜歡用Fiddler軟件手動進行的請求,你也可以看到原始的請求/響應,創建任何HTTP動詞請求等

6

爲您的操作方法,如果你發送一個請求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.csRegister方法。原始請求將在requestMessage變量中。在調試或寫入跟蹤等過程中,您可以通過打破此處進行檢查。

+1

只需添加request.Content = new StringContent(requestMessage.Substring(requestMessage.IndexOf(「{」)),Encoding.UTF8「應用程序/ JSON「);以免干擾流程鏈。 – Martin

0

在IIS(不是IIS Express或Kestrel)上有一項稱爲「失敗請求跟蹤」的功能。此功能將向您顯示通過您的過濾條件的任何請求/響應週期的詳細日誌。

這裏是輸出日誌的樣子:

enter image description here

要啓用此功能:

  1. 開始 - >運行 - >輸入 「INETMGR」 [這將打開IIS管理界面]
  2. 條在服務器級別啓用FTW和添加規則 enter image description here
  3. 添加規則(你可以添加HTTP 200代碼過濾器來跟蹤成功的請求,或者一些其他的代碼 - 您認爲合適的)enter image description here
  4. 最後一步 - 我承諾 - 每一個網站都需要「在選擇」此功能enter image description here

完蛋了..現在做你的事,並轉到文件夾日誌,按時間排序。您應該看到在測試期間創建的新日誌條目。

祝你好運!!!