首页 > 解决方案 > 如何增加请求长度以在 ASP.NET Core 中上传大文件?

问题描述

我开发了一个用于上传文件的 ASP.NET Core Web API。我正在通过邮递员测试 API。当我尝试上传超过 28 MB 的文件时,它会引发超出请求长度的错误。所以我试图找出这个问题的解决方案。如果我通过更改 web.config 中的值来增加请求长度错误,它会起作用。但我的要求是不要使用 web.config 文件。如果我增加红隼服务器的 MaxRequestBodySize 它在我通过 Dotnet CLI 运行应用程序时工作正常,但在我通过 Visual Studio 2019 的 IIS express 运行应用程序时不起作用。如果我在 POST 方法上应用 [DisableRequestSizeLimit] 属性,它仅适用于 dotnet CLI 但不在 IIS Express 上。如何在全局范围内增加 IIS express 和 Dotnet CLI 的请求长度?任何帮助表示赞赏。

webBuilder.ConfigureKestrel((context, options) =>
                    {
                       
                        options.Limits.MaxRequestBodySize = 524288000;
                    });

标签: c#asp.net-coreasp.net-core-webapikestrel-http-serveriis-express-10

解决方案


这是在不更改 web.config 的情况下全局配置它的方法:

    public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
    WebHost.CreateDefaultBuilder(args)
    .UseStartup<Startup>()
    .UseKestrel(options =>
    {
        options.Limits.MaxRequestBodySize = 524288000;
    });

如果不是红隼:

 .UseHttpSys(options =>
 {
    options.MaxRequestBodySize = 524288000;
 });

通过中间件

        public void Configure(IApplicationBuilder app )
        {
            app.UseWhen(context => context.Request.Path.StartsWithSegments("/api"), appBuilder =>
            {
                context.Features.Get<IHttpMaxRequestBodySizeFeature>().MaxRequestBodySize = null;
            });
        }

如果不使用 UseWhen :

app.Run(async context =>
            {
                context.Features.Get<IHttpMaxRequestBodySizeFeature>().MaxRequestBodySize = 524288000;
            });

或者 您还可以在控制器方法中添加标头:

  [DisableRequestSizeLimit]
  [HttpPost]
  public async Task<IActionResult> Post([FromBody] List<Obj> obj)
  {
  }

//

  [RequestSizeLimit(524288000)]
  [DisableRequestSizeLimit]
  [HttpPost]
   public async Task<IActionResult> Post([FromBody] List<Obj> obj)
   {
   }

推荐阅读