Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

RequestEntityTooLarge response from Web Api when trying to upload a file with HttpClient

I'm trying to create a web service to upload files by Post with Asp.Net Web Api. These are the implementations for Client and Web Api respectively:

Client:

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);

      }
}

Server:

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>

I'm trying to upload a file which is 5Mb, and every time I try to call the service, I get a 413 Http Error Request Entity Too Large. If the file is small (e.g. 40kb) everything works fine.

Looking through internet I tried to do several modifications to the web.config, but nothing seems to work properly. What am I doing wrong?

like image 611
David Jiménez Martínez Avatar asked Nov 03 '14 09:11

David Jiménez Martínez


1 Answers

I solved the problem through this solution: http://www.smartdigitizers.com/net-development-tips/iis-7-how-to-resolve-error-https-413-request-entity-too-large/

  1. Launch “Internet Information Services (IIS) Manager”
  2. Select the site that you are hosting your web application under it.
  3. In the Features section, double click “Configuration Editor”
  4. Under “Section” select: system.webServer then serverRuntime
  5. Modify the “uploadReadAheadSize” section to be like 20MB (the value there is in Bytes)
  6. Click Apply
like image 80
David Jiménez Martínez Avatar answered Nov 03 '22 20:11

David Jiménez Martínez