swagger .NET 7最小Web API上的文件大小限制

g9icjywg  于 2023-10-18  发布在  .NET
关注(0)|答案(1)|浏览(151)

所以我在这里遇到了一个小问题,我想将.NET Core 2.1 Web API移植到.NET 7的ASP.NET Core Web API。我需要能够上传大于50 MB的文件(高达300 MB,因为它将包括视频),但我找不到最小的API的任何信息。
我现在拥有的是:

using Microsoft.AspNetCore.Http.Features;
using System.Net;

var builder = WebApplication.CreateBuilder(args);

builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();

builder.Services.Configure<IISServerOptions>(options =>
{
options.MaxRequestBodySize = 536870912;
});

builder.Services.Configure<FormOptions>(options =>
{
options.ValueLengthLimit = 536870912;
options.MultipartBodyLengthLimit = 536870912;
options.MultipartHeadersLengthLimit = 536870912;
});

var app = builder.Build();

if (app.Environment.IsDevelopment())
{
app.UseSwagger();
app.UseSwaggerUI();
}

app.UseHttpsRedirection();

app.MapGet("/", () =\> "hello world!");

app.MapPost("/upload", async (IFormFile file, string context = "") =>
{
string filename = Constants.GetFilepath(context, WebUtility.HtmlEncode(file.FileName));
using var stream = File.OpenWrite(filename);
await file.CopyToAsync(stream);
});

在旧的API上,我在Startup.cs上有这样的东西(但使用最小的API,我无法指定Startup.cs文件来配置API):

public class Startup
{
readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";
public Startup(IConfiguration configuration)
{
Configuration = configuration;
_ = new Constants(configuration);
}

    public IConfiguration Configuration { get; }
    
    public void ConfigureServices(IServiceCollection services)
    {
    
        services.Configure<FormOptions>(options =>
        {
            options.MultipartBodyLengthLimit = 322122547200;
        });
    
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    }
    
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
            app.UseDeveloperExceptionPage();
        else
            app.UseHsts();
    
        app.UseCors(MyAllowSpecificOrigins);
    
        app.UseAuthentication();
        app.UseHttpsRedirection();
        app.UseMvc();
    
    }

}

您可以看到我可以在Startup.cs和web.config中指定MultipartBodyLengthLimit,但现在它似乎不起作用。
我是不是漏了什么?我看到的每一篇文章都在谈论普通的API,而不是最小的,所以他们的解决方案似乎不匹配。
提前感谢!
我尝试指定

builder.Services.Configure<IISServerOptions>(options =>
{
options.MaxRequestBodySize = 536870912;
});

builder.Services.Configure<FormOptions>(options =>
{
options.ValueLengthLimit = 536870912;
options.MultipartBodyLengthLimit = 536870912;
options.MultipartHeadersLengthLimit = 536870912;
});

但没有运气。我使用Swagger来检查它是否上传,我得到了一个200代码,但调试不会进入/upload方法。

mfpqipee

mfpqipee1#

在我的例子中,服务是通过Kestrel工作的,而不是IIS。所以优化KestrelServerOptions解决了这个问题。

var builder = WebApplication.CreateBuilder(args);
// AddResponseCompression, FormOptions
builder.Services.Configure<KestrelServerOptions>(options =>
   {
     options.Limits.MaxRequestBodySize = 1_000_000_000;
   });

相关问题