2014-11-03 147 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

相关问题