2012-12-09 31 views
2

我的路線是這樣的:爲什麼會出現400錯誤的請求發送DELETE動詞的ASP.NET Web API是什麼時候?

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

我有一個Base64編碼的URI,我在地方{} URI參數的發送。它沒有非法字符(我已經正確格式化並檢查確認)。但是,它大約有300-400個字符。

當我發送一個DELETE請求到使用長的base64參數這個地址,我得到一個400錯誤狀態,無效的URL響應。縮短參數時,它可以工作。我懷疑有最大路徑問題?

使用替代的路徑參數的查詢字符串的工作,但我寧願留在RESTful方法。有沒有一個配置設置,我可以改變我的Web API項目,以允許更長的基於路徑的參數?

這工作:

http://localhost:99999/api/reg/10?uri=<long_base64_parameter> 

這不起作用:

http://localhost:99999/api/reg/10/<long_base64_parameter> 
+0

你如何格式化它是否正確? – JayC

+0

你使用encodeURIComponent了嗎? https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURIcomponent – JayC

+0

@JayC是,非法字符將被替換。我檢查了傳出的HttpRequest,並確認參數中只有字母數字字符。請注意,我的請求在使用查詢字符串時起作用,但在使用RESTful路徑參數時不起作用。 –

回答

1

貌似這些都與:

The request URL is invalid in IIS 7

ASP.NET MVC, Url Routing: Maximum Path (URL) Length

另見:

http://social.msdn.microsoft.com/Forums/nl/netfxnetcom/thread/723e6bfd-cab7-417b-b487-67f1dcfa524f

看起來有可能是默認路徑段的限制,但有幾個解決方法(URL重寫註冊表更改等)

+0

感謝您的回覆。不幸的是,我已經通過了所有這些鏈接,並且解決方法不適合我的問題。因爲它託管在Azure中,所以更改Web服務器的行爲是不可能的。 –

+0

如何? Url重寫看起來在Azure中受支持。 http://msdn.microsoft.com/en-us/library/windowsazure/dd573358.aspx。所有你需要做的是添加幾行到你的web配置,我希望。我從來沒有使用Azure的服務,但只要URL重寫模塊安裝在IIS的任何雲例如,添加重寫規則的應用程序通常是修改應用程序的Web配置文件一樣簡單。 – JayC

+0

謝謝,我會研究它。 –

相關問題