с основным приложением .net с использованием Docker-контейнеров - PullRequest
0 голосов
/ 11 октября 2019

Я установил свойство:

<requestLimits maxAllowedContentLength="73400320" />

В моем основном приложении .net, однако, когда я запускаю свое приложение внутри контейнера Docker, кажется, что он не смотрит на этот параметр, который находится вмоя веб-конфигурация, я полагаю, докеру не нужен этот файл, так как приложение размещено с использованием kestrel?

в моем приложении .net core 2.2, я не могу загрузить файл размером более 30 МБ (по умолчаниюмаксимальный размер файла), когда я запускаю это в докере, все отлично работает, когда я не использую докер.

Есть ли конфигурация, которую мне нужно сделать, чтобы изменить это в докере.

1 Ответ

1 голос
/ 12 октября 2019

Файл web.config применяется к классическому стеку IIS, который работает только в Windows. Используя Docker, вы запускаете новый независимый от платформы веб-сервер Kestrel, представленный в ASP.NET Core.

Global

Чтобы установить ограничение глобально для каждого запроса (что эквивалентно настройке IIS), просто установите свойство, добавив .UseKestrel с соответствующими параметрами в Program.CreateWebHostBuilder, напримерэто:

.ConfigureKestrel((context, serverOptions) => {
    serverOptions.Limits.MaxRequestBodySize = 73400320;
});

Вы можете найти все параметры конфигурации в документации ASP.NET Core . Не забудьте установить версию ASP.NET Core слева. Это важно, потому что API мог измениться, например, с 2,1 до 2,2.

Локальный

В качестве альтернативы, также возможно просто увеличить его для определенных действий, используя аннотации данных:

[RequestSizeLimit(73400320)]
public IActionResult MyActionMethod() { 
    // ... 
}

Как предотвратить эти сюрпризы в будущем

Эта проблема, вероятно, вызвана Visual Studio, которая автоматически устанавливает IIS в качестве веб-сервера по умолчанию вместо Kestrel. Таким образом, вы используете IIS при локальной разработке и Kestrel при хостинге в Docker. К сожалению, это не на 100% интуитивно понятно в VS. Вы должны проверить, появляется ли контекстное меню при нажатии на стрелку рядом с кнопкой отладки, например:

enter image description here

IrCms isдинамически заменяется именем проекта вашего приложения. Если это выбрано, вы получаете Kestrel во время отладки. Так что проект на скриншоте хорошо настроен для Kestrel. Может быть подтверждено консольным окном, которое открылось и говорит прослушивание порта XYZ после отладки.

IIS не открывает ни одного окна. Просто его значок появится слева от ваших часов на панели задач:

enter image description here

Первое, что я обычно делаю в новых проектах ASP.NET Core, этоменяя IIS на пустельгуЯ бы рекомендовал это особенно при развертывании в Docker, поэтому вы всегда используете один и тот же веб-сервер. В общем, Kestrel - это легкая альтернатива для рассмотрения, когда не требуется никаких специальных функций.

...