【问题标题】:<requestLimits maxAllowedContentLength="73400320" /> with .net core app using docker containers<requestLimits maxAllowedContentLength="73400320" /> 使用 .net 核心应用程序使用 docker 容器
【发布时间】:2020-02-09 03:19:24
【问题描述】:

我已经设置了属性:

<requestLimits maxAllowedContentLength="73400320" />

在我的 .net 核心应用程序中,但是当我在 docker 容器中运行我的应用程序时,它似乎并没有查看我的 web 配置文件中的这个设置,我猜 docker 不需要这个文件是使用红隼托管的应用程序吗?

在我的 .net core 2.2 应用程序中,当我在 docker 上运行此程序时,我无法上传大于 30mb(默认最大文件大小)的文件,当我不使用 docker 时,一切正常。

我需要做一些配置来在 docker 中更改它吗?

【问题讨论】:

  • 试过&lt;httpRuntime maxRequestLength="65536"/&gt; ?
  • &lt;httpRuntime maxRequestLength="65536"/&gt; 代表ASP.NET

标签: docker .net-core asp.net-core-webapi


【解决方案1】:

web.config 文件适用于仅适用于 Windows 的经典 IIS 堆栈。使用 Docker,您正在运行随 ASP.NET Core 引入的新的独立于平台的 Kestrel Web 服务器。

全球

要在每个请求上全局设置限制(这似乎等同于您的 IIS 设置),只需通过添加 .UseKestrelProgram.CreateWebHostBuilder 中的相应选项来设置属性,如下所示:

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

您可以找到所有配置选项in the ASP.NET Core documentation。不要忘记在左侧设置您的 ASP.NET Core 版本。这很重要,因为 API 可能已更改,例如从 2.1 到 2.2。

本地

或者,也可以通过使用数据注释为某些操作增加它:

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

如何防止这些意外发生在未来

此问题可能是由 Visual Studio 引起的,它自动将 IIS 设置为默认 Web 服务器,而不是 Kestrel。因此,您在本地开发期间使用 IIS,在 Docker 上托管时使用 Kestrel。可悲的是,这在 VS 中并不是 100% 直观的。您需要检查单击调试按钮附近的箭头时弹出的上下文菜单,如下所示:

IrCms 被您的应用程序项目名称动态替换。如果选择此选项,您将在调试期间获得 Kestrel。因此,屏幕截图上的项目已针对 Kestrel 进行了良好配置。可以通过控制台窗口进行验证,该窗口在调试后打开并说 listen on port XYZ

IIS 没有打开任何窗口。只是它的图标会出现在任务栏中的时钟左侧:

我通常在新的 ASP.NET Core 项目上做的第一件事是将 IIS 更改为 Kestrel。我特别推荐这个,尤其是在部署到 Docker 时,所以你总是使用同一个网络服务器。一般来说,当不需要它们的特殊功能时,Kestrel 是一种可以考虑的轻量级替代方案。

【讨论】:

  • 太棒了,这解决了我的问题,非常感谢!
猜你喜欢
  • 2019-01-26
  • 2020-07-16
  • 2020-02-01
  • 2020-11-21
  • 2021-01-30
  • 1970-01-01
  • 2018-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多