2013-08-06 25 views
21

返回404我有一個的WebAPI控制器,看起來像這樣的方法:我有專門爲此操作配置的自定義路線與電子郵件地址參數的WebAPI方法從HttpClient的

[HttpGet] 
[AcceptVerbs("GET")] 
public HttpResponseMessage Run(string reportName, int someId, string someText, DateTime asOfDate, string username) 

。當我瀏覽我的瀏覽器的Web服務,一切工作正常,並執行相應的操作:

http://localhost:xxxx/ControllerName/Run/asdf/1/asdf/07-01-2012/[email protected] 

然而,當我嘗試使用的HttpClient和執行「獲取」我得到編程調用Web服務一個404錯誤。當用戶名參數不是電子郵件地址時,我不會收到錯誤消息。例如,當用戶名只是「用戶」,一切正常。這裏是示例代碼:

var url = "http://localhost:xxxx/ControllerName/Run/asdf/1/asdf/07-01-2012/[email protected]" 
var client = new System.Net.Http.HttpClient(); 
var response = client.Get(url); 

//fails here with 404 error 
response.EnsureSuccessStatusCode(); 

我試過UrlEncoding電子郵件地址沒有運氣。任何建議表示讚賞。

+0

嘗試用%替換@ 40 - 編輯 - 只是一個完整的隨機猜測。 -Edit2- UrlEncoding應該已經爲你切換,所以如果我告訴你的工作,你可能想檢查你如何使用UrlEncoding和可能的參數。 – Pluc

+2

考慮到請求的複雜性,您可能希望使用「POST」動詞併發送自定義複雜對象。然後你還可以跳過其他一些問題,比如不可能在任何字符串中傳遞字符'/'。 – user1908061

+0

@Pluc,我給你的建議一次沒有預期的成功,因爲這正是urlecode正在做的。感謝壽。 –

回答

23

只是一個快速的想法......「.com」會導致這個問題?

+18

哇,謝謝!這實際上是'。'字符引起問題而不是'@'符號。在看到這篇文章後: http://stackoverflow.com/questions/13298542/apicontroller-returns-404-when-id-contains-period 我剛剛在最後一個參數的路線添加了一個尾隨的'/'和它的作用就像一種魅力。 –

15

這是因爲IIS試圖映射特殊字符。添加以下到Web.config應該解決這個問題:

<system.webServer> 
    <modules runAllManagedModulesForAllRequests="true" /> 
</system.webServer> 

點擊此處瞭解詳情:http://www.iis.net/configreference/system.webserver/modules

+0

這是我認爲我們會解決的問題,但我希望看看是否還有其他可能出現的問題。 – Codeacula

+0

@Codeacula性能最差,因爲託管模塊將用於提供靜態內容。如果內容需要任何形式的認證,這將是一件好事。 – user2320464

0

你需要一個基本的網址查詢。

[Route("api/emails")] 
public HttpResponseMessage Run(string email) {...} 

GET api/[email protected] 
相關問題