Запрос RequestEntityTooLarge от Web Api при попытке загрузить файл с помощью HttpClient

1

Я пытаюсь создать веб-службу для загрузки файлов по почте с помощью Asp.Net Web Api. Это реализация для Client и Web Api соответственно:

Клиент:

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>

Я пытаюсь загрузить файл размером 5 МБ, и каждый раз, когда я пытаюсь вызвать службу, я получаю 413 Http Error Entity Too Large. Если файл небольшой (например, 40kb), все работает нормально.

Просматривая Интернет, я попытался сделать несколько изменений в web.config, но ничего не работает должным образом. Что я делаю не так?

Теги:
httpclient
asp.net-web-api
http-status-code-404

1 ответ

7
Лучший ответ

Я решил проблему с помощью этого решения: http://www.smartdigitizers.com/net-development-tips/iis-7-how-to-resolve-error-https-413-request-entity-too-large/

  1. Запустить "Менеджер информационных служб Интернета (IIS)"
  2. Выберите сайт, на котором размещено ваше веб-приложение.
  3. В разделе "Функции" дважды щелкните "Редактор конфигурации",
  4. В разделе "Раздел" выберите: system.webServer then serverRuntime
  5. Измените раздел "uploadReadAheadSize" равным 20 МБ (значение, которое есть в байтах)
  6. Нажмите Применить
  • 0
    Хотя эта ссылка может ответить на вопрос, лучше включить сюда основные части ответа и предоставить ссылку для справки. Ответы, содержащие только ссылки, могут стать недействительными, если связанная страница изменится.
  • 0
    Спасибо, я отредактировал свой ответ. Нет причин для понижения, хотя.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню