c# - 如何增加请求长度以在 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;
});
解决方案
这是在不更改 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)
{
}
推荐阅读
- javascript - 更改表单中 div 的高度时,如何防止滚动到页面顶部?
- sharepoint-online - Sharepoint online - 不允许使用令牌类型
- javascript - 如何使用 date-fns lib 解析字符串日期
- oracle - Oracle ODI:收集 C$ 表上的统计信息
- python - 如何创建步进命令以及如何使用 discord.py 发送 privet 消息
- microsoft-graph-api - 直接路由调用 API 是否支持过滤器?
- python - Visual Studio 代码 Python 文件类型
- angular - mat-icon 没有样式
- html - 在根级别使用时,rems 和 ems 是否等效?
- postgresql - Postgres typeorm将单个值与字符串列表jsonb进行比较