所以我在这里遇到了一个小问题,我想将.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方法。
1条答案
按热度按时间mfpqipee1#
在我的例子中,服务是通过Kestrel工作的,而不是IIS。所以优化
KestrelServerOptions
解决了这个问题。