2012-09-26 54 views
0

我正在嘗試設置一個簡單的測試,以向我的自託管Web-API服務器發出POST請求。自託管的Web API - Post Param null

var config = new HttpSelfHostConfiguration(new Uri(baseAddress)); 

// add a route 
config.Routes.MapHttpRoute(name: "DefaultApi", 
          routeTemplate: "api/{controller}/{id}", 
          defaults: new { id = RouteParameter.Optional } 
); 

server = new HttpSelfHostServer(config); 
server.OpenAsync().Wait(); 

我添加了一個控制器:

public class PayloadController : ApiController 
{  
    public string Get() 
    { 
     return "Hello from GET"; 
    } 

    public HttpResponseMessage PostItem(Payload payload) 
    { 
     // payload 
     //... 
    } 
} 

而且我也有相應的模型(確保它包含屬性):

public class Payload 
    { 
     public string Date { get; set; } 
     public string Command { get; set; } 
    } 

我使用的是Chrome上休息控制檯測試服務器,爲我的控制器中的GET獲取正確的結果。

Issueing以下請求作爲POST:

Request Url: http://localhost:8080/api/payload 
Request Method: POST 

Params: { 
    "Date": "2012.09.26", 
    "Command": "Hello" 
} 

編輯:內容類型設置爲應用/ JSON和編碼到UTF-8

設置在一個斷點控制器顯示POST參數未正確反序列化爲Paylod對象,參數爲null

我可能錯過了什麼?

回答

2

你需要指定請求的Content-Type爲application/json

編輯

從下面的評論信息完全應答:

如果您正在使用REST控制檯的「請求參數」,而不是的「請求有效載荷原始數據」,即使指定了application/json,它也不會生成JSON。

你需要生JSON粘貼到原體領域是這樣的:http://screencast.com/t/iRWZqv91

{ 
    "Date": "2012.09.26", 
    "Command": "Hello" 
} 
+0

我實際上做了,再加上編碼設置爲UTF-8。 – rdoubleui

+0

如果您使用REST控制檯的「請求參數」而不是「request payload raw body」,它將不會生成JSON。您需要將原始JSON粘貼到原始字段 –

+1

,如下所示:http://screencast.com/t/iRWZqv91 –