2014-01-07 15 views
1

我有Web API,並希望使內容類型可選。REST WEB API:如何使Content-Type標題可選?

當前,如果我在調用REST(POST)方法時忽略content-Type頭,它會引發錯誤。

這是我如何的Web API定義路線 -

routes.MapHttpRoute(
    name: "myMethodPost", 
    routeTemplate: "api/{id}/Settings/{settings}", 
    defaults: new { controller = "Settings", action = "updateSettings" }, 
    constraints: new { httpMethod = new HttpMethodConstraint("POST") } 
); 

同時調用此方法 -

api/1/Settings/testSettings 
method = "Post" 

它拋出錯誤。但當添加以下 -

apiRequest.ContentType = "application/json"; 

它工作正常。

現在,如何使Content-Type頭可選?

+0

爲什麼你想讓它成爲可選的?如果請求具有正文而不是內容類型標題,那麼Web API無法確定要爲反序列化請求正文選擇哪種格式化程序......您的確切場景是什麼? –

+0

@KiranChalla,是的,你是對的....我在參數列表中有自定義類型,並且由於缺少ContentType而無法綁定參數。 –

+0

沒有內容類型的實體不是一個實體,它只是一堆或隨機的1s和0s,它們毫無意義。爲什麼不修正客戶端沒有發送內容類型的錯誤,而不是引入服務器允許的錯誤? –

回答

2

您可以在服務器上創建一個消息處理程序,該消息處理程序將Content-Type設置爲'application/json',如果它丟失並且存在非零長度的主體。這樣客戶就不必發送它。

+0

任何例子...? –

+0

我添加了messagehandler並寫了這一行 - request.Headers.Accept.Add(new MediaTypeWithQualityHeaderValue(「application/json」));但仍然自定義類型參數是空的 –

+1

以及我知道了,我在消息處理程序中添加了以下內容 - 「request.Content.Headers.ContentType = new MediaTypeHeaderValue(」application/json「);」 –