2016-04-12 71 views
0

我最近遇到了一個問題,我正在爲客戶運行一個簡單的Web API服務。該服務接受GET或POST。 POST方法是這樣定義的:ASP.Net Web API 2在POST上返回404(有時)

public IHttpActionResult PostUpload(UploadModel model) 
{ ... } 

這個模型看起來是這樣的:

public class UploadModel 
{ 
    public Guid UserKey { get; set; } 
    public string OrgCode { get; set; } 
    public byte[] Export { get; set; } 
} 

客戶今天報道說,他開始有與我們建立與服務交互的客戶端程序的麻煩。只要程序從200以外的其他服務接收到狀態代碼,程序就會記錄日誌。當客戶運行該程序時,他將收到404 - Not Found。我在IIS日誌中驗證該程序正在發送POST請求,並且該URI是正確的。

當我運行該程序時,它總是收到200狀態。

該方法中的代碼只返回兩個可能的IHttpActionResult中的一個:確定是否沒有問題,否則爲InternalServerError()。

使用郵差,我已經嘗試發送參數UserKey,OrgCode和Export的各種不同的組合/值,但我無法讓API發送回200或500以外的任何其他狀態。我嘗試過使用與客戶相同的數據,並從我的終點始終貫穿始終。

它似乎是某種路由問題,就像它不能識別正確的方法,但我看不出是什麼問題。希望有人指出我明顯缺少的東西。

+0

你如何配置你的路由?您是使用基於約定的路由還是屬性路由? – Nkosi

+0

基於約定。對/ api/DataExports/Upload的POST會爲我返回一個200,對於使用相同應用程序併發送相同數據的客戶,這將返回404。下一步,我猜是捕獲請求信息,因爲它打到網站,看看是否有代理或他的一端擰緊請求。 –

回答

0

與社區共享解決方案:在與客戶進一步聯繫之後,事實證明,我必須測試的數據與他的測試數據不一樣。他在POST中發送的數據比我發送的數據大得多。這引發了一個關於我過去遇到的問題的想法。我非常關注URI和路由,以及我沒有考慮過最大允許上傳大小的具體錯誤(404)。

在web配置設置以下,允許高達100MB的固定問題的請求:

<system.web> 
    <httpRuntime maxRequestLength="102400" /> 
</system.web> 
<system.webServer> 
    <security> 
     <requestFiltering> 
      <requestLimits maxAllowedContentLength="104857600" /> 
     </requestFiltering> 
    </security> 
</system.webServer>