Ядро webapi не может загрузить большой файл, заблокированный политикой cors - PullRequest
1 голос
/ 10 марта 2020

Я пытаюсь загрузить большие файлы из Angular 9.0 внешнего интерфейса в Web Api. net core 3.1. Я следую этому уроку https://code-maze.com/upload-files-dot-net-core-angular/. Все работает идеально до максимального размера файла по умолчанию, равного 28,6 МБ, как только я go выше этого размера файла, я получаю следующую ошибку cors: «Доступ к XMLHttpRequest на [localhost] из источника [localhost] был заблокирован политикой CORS : На запрашиваемом ресурсе отсутствует заголовок «Access-Control-Allow-Origin». ' вернулся с сервера. Я еще не пробовал это на IIS, поэтому я получаю эти проблемы локально с Kestrel.

Мой ConfigureServices выглядит следующим образом:

 services.AddCors(options =>
  {
   options.AddPolicy("AllowLocalAngularWebClient",
    policy => policy.WithOrigins("http://localhost:4200").WithHeaders().AllowAnyHeader().AllowAnyMethod());
   });

Мой Configure выглядит следующим образом:

app.UseCors("AllowLocalAngularWebClient");
 app.UseStaticFiles(new StaticFileOptions()
            {
                FileProvider = new PhysicalFileProvider
                      (Path.Combine(Directory.GetCurrentDirectory(), @"uploads")),
                RequestPath = new PathString("/uploads")
            });

Мой контроллер выглядит следующим образом:

[EnableCors("AllowLocalAngularWebClient")]
[DisableRequestSizeLimit]

Я сталкивался с несколькими блогами, в которых говорилось, что мне нужно настроить kestrel, поэтому я попробовал это в BuildWebHost:

.ConfigureKestrel((context, options) =>
                {
                    options.Limits.MaxRequestBodySize = 52428800; //or null for unlimited!
                })

Также на моем контроллере я пробовал оба:

 [DisableRequestSizeLimit]

и

[RequestSizeLimit(52428800)]

Но я все еще получаю ошибку cors с файлами выше 28.6mb

Я не не знаю, является ли это ошибкой cors или локальной ошибкой IIS / kestrel visual studio.

Любая помощь будет принята с благодарностью.

Ответы [ 2 ]

1 голос
/ 16 апреля 2020

Думаю, я бы добавил немного больше к этому ...

Мое решение состояло в том, чтобы обновить конфигурацию IIS Express, добавив следующую строку в файл конфигурации IIS Express:

  <requestFiltering>
    <requestLimits maxAllowedContentLength="500000000"></requestLimits>
    <fileExtensions allowUnlisted="true" applyToWebDAV="true">

Строка ключа:

<requestLimits maxAllowedContentLength="500000000"></requestLimits>

В моем случае файл конфигурации для обновления находился по адресу C: \ Users \ USER_NAME \ source \ repos \ PROJECT_NAME> .vs \ PROJECT_NAME \ config \ applicationhost.config

Вы можете найти файл конфигурации, запустив свой проект (под управлением IIS Express), щелкните правой кнопкой мыши значок IIS Express на панели задач, нажмите «Показать все приложения» и выберите Ваш конкретный c сайт / проект.

Надеюсь, это кому-нибудь поможет, я несколько часов об этом сгорел.

1 голос
/ 16 марта 2020

Я обнаружил проблему после удаления всего моего проекта и хотел поделиться этим в случае, если у кого-то еще есть такая же проблема. Вам нужно иметь опцию commandName в launchSettings. json, установленную в 'Project', чтобы она выполнялась с CLI. NET непосредственно в командной строке. Если для commandName установлено значение «IIS Express», загрузка ограничивается 28,6 МБ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...