2014-11-03 152 views
1

我試圖創建一個Web服務以通過Post與Asp.Net Web Api上傳文件。這些分別是客戶端和Web API來實現:嘗試使用HttpClient上傳文件時Web Api的RequestEntityTooLarge響應

客戶:

using (var client = new HttpClient()) { 
    client.BaseAddress = new Uri("https://127.0.0.1:44444/"); 
    using (var content = 
     new MultipartFormDataContent("Upload----" + DateTime.Now.ToString(CultureInfo.InvariantCulture))) { 
     content.Add(new ByteArrayContent(File.ReadAllBytes(filepath))); 
     content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); 
     var response = await client.PostAsync("api/Synchronization", content); 

     if (response.IsSuccessStatusCode) 
      eventLog1.WriteEntry("Synchronization has been successful", EventLogEntryType.Information); 
     else 
      eventLog1.WriteEntry(response.StatusCode + ":" + response.ReasonPhrase, EventLogEntryType.Error); 

     } 
} 

服務器:

public class SynchronizationController : ApiController { 

    public HttpResponseMessage SynchronizeCsv() { 
     var task = this.Request.Content.ReadAsStreamAsync(); 
     task.Wait(); 
     Stream requestStream = task.Result; 

     try { 
      Stream fileStream = File.Create(HttpContext.Current.Server.MapPath(path)); 
      requestStream.CopyTo(fileStream); 
      fileStream.Close(); 
      requestStream.Close(); 
     } 
     catch (IOException) { 
      return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, "A generic error occured. Please try again later."); 
     } 

     HttpResponseMessage response = new HttpResponseMessage(); 
     response.StatusCode = HttpStatusCode.Created; 
     return response; 
    } 
} 

Web.config文件:

<system.web> 
    <compilation debug="true" targetFramework="4.5" /> 
    <httpRuntime targetFramework="4.5" maxRequestLength="2097152" /> 
    </system.web> 
    <system.webServer> 
    <security> 
     <requestFiltering> 
     <requestLimits maxAllowedContentLength="2147483648" /> 
     </requestFiltering> 
    </security> 
    <handlers> 
     <remove name="ExtensionlessUrlHandler-Integrated-4.0" /> 
     <remove name="OPTIONSVerbHandler" /> 
     <remove name="TRACEVerbHandler" /> 
     <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" /> 
    </handlers> 
    </system.webServer> 

我試圖上傳一個5Mb的文件,每次我嘗試調用該服務時,都會收到一個413 Http Error Request Entity太大。如果文件很小(例如40kb),一切正常。

通過互聯網尋找我試圖做一些修改web.config,但似乎沒有任何工作正常。我究竟做錯了什麼?

回答

7

我通過這個解決方案解決了這個問題:http://www.smartdigitizers.com/net-development-tips/iis-7-how-to-resolve-error-https-413-request-entity-too-large/

  1. 啓動「Internet信息服務(IIS)管理器」
  2. 選擇您在它託管Web應用程序的網站。
  3. 在功能部分,雙擊「配置編輯器」
  4. 在「節」選擇:system.webServer然後serverRuntime中
  5. 修改「應將UploadReadAheadSize」部分要像20MB(價值有以字節爲單位)
  6. 點擊申請
+0

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分,並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – 2014-11-03 15:48:04

+0

謝謝,我編輯了我的答案。沒有理由downvote雖然。 – 2014-11-03 15:49:20

+0

好,但我沒有downvote你,順便說一句。 – 2014-11-03 15:50:13

相關問題