2012-07-30 52 views
1

我使用我的web服務時出現了一個奇怪的問題:爲什麼設置POST內容類型:「Application/Json」在REST WebService上導致「錯誤請求」?

當我作爲一個客戶端在沒有設置任何「類型 - 內容」頭的情況下將表單發佈到REST Web服務時,事情可以正常工作。我接到服務器上的呼叫,Json文本可用。

如果我作爲客戶端將我的發佈請求的內容類型標頭設置爲「application/json」,則服務器通過「錯誤請求(400)」回覆。

Web服務方法是:

<WebInvoke(UriTemplate:="Login", Method:="POST")> 
Public Function LoginFormAccess(data As IO.Stream) As String 
(...) 
end function 

如果我不提「應用程序/ Json的」,我可以檢索客戶端JSON類型的機構,張貼在數據流。如果我這樣做,我會收到錯誤的請求答案。

爲什麼有關內容類型值的行爲有如此大的差異,以及提供這種差異的是什麼?該方法是否需要另一種類型的參數,或者是否需要更改或檢查其他內容?

ADDED:如果內容類型是「Application/Json」並且主體是空的,那麼它可以工作...!

  • 注1:類負責接聽電話實例化。 (在新()中跟蹤的證明了它)。所以,問題似乎是服務器沒有找到一個適當的方法來調用該對象...

  • 注2:我有這個問題使用不同的客戶端,所以我很漂亮 肯定是一個服務器端問題。

  • 注意3:我已經使用WCF REST服務應用程序模板創建我的項目 。注意4:提及「ResponseFormat = WebMessageFormat.Json」和「RequestFormat = WebMessageFormat.Json」沒有幫助。

+0

嘗試將'ResponseFormat = WebMessageFormat.Json'添加到'WebInvoke' – toniedzwiedz 2012-07-30 16:22:12

+0

我試過了。但沒有成功。我添加了「requestFormat:= WebMessageFormat.Json」,因爲它是Json格式的請求。但它不起作用... – 2012-07-31 07:29:27

+1

如果我將content-type設置爲「text/javascript」,它將起作用。與「Application/Json」有什麼不同? – 2012-07-31 08:08:29

回答

1

當您添加content-type頭你要求,您指定在您的要求數據的內容類型,而不是你期望看到的內容返回。

我已經發布的內容是您將XML張貼到服務中,並且當您將content-type設置爲JSON時,您打破了服務器解析正文的能力。您的模糊陳述,它的工作原理「如果內容類型是」應用程序/ JSON「和身體是空的」可能會承擔這一點(假設你的意思是你的請求的身體,而不是響應)。

您可以通過添加內容類型的XML而不是JSON來證明這一點 - 如果它匹配您的請求的實際正文,就可以正常工作。

簡而言之:它提供了「錯誤請求」錯誤,因爲您的請求指定了JSON內容並且您沒有發送JSON。

相關問題