gpt4 book ai didi

asp.net-core - 在 .NET 6 中提交大型表单数据并执行操作后返回 400 错误

转载 作者:行者123 更新时间:2023-12-03 08:06:42 29 4
gpt4 key购买 nike

我正在使用.NET 6发布一个具有大表单数据(大约200Mb)的表单,并且没有任何文件。

这是我的前端表单:

@using (Html.BeginForm(FormMethod.Post, new { id = "frm", @autocomplete = "off", @enctype="multipart/form-data" }))
{
@Html.AntiForgeryToken()
...
}

和后端:

[ValidateAntiForgeryToken]
[DisableRequestSizeLimit]
[HttpPost]
public async Task<IActionResult> SearchList(VM_SearchList data)

引自Skrface我在前端提交了一个 VerificationToken 字段,并在后端用一个 ValidateAntiForgeryToken 过滤器进行了装饰,所以它看起来不像是一个验证问题。

来自Matthew Steven Monkanthis answer ,我已经尝试了那里的所有设置,例如上面的 DisableRequestSizeLimit 过滤器,并且还尝试使用设置为 500Mb 的 RequestFormLimitsRequestSizeLimit 过滤器进行装饰。

[ValidateAntiForgeryToken]
[RequestFormLimits(MultipartBodyLengthLimit = 524288000)]
[RequestSizeLimit(524288000)]
[HttpPost]
public async Task<IActionResult> SearchList(VM_SearchList data)

并且还尝试在Program.cs中设置:

builder.Services.Configure<HttpSysOptions>(options =>
{
options.MaxRequestBodySize = int.MaxValue;

});

builder.Services.AddMvc();
builder.Services.Configure<FormOptions>(x =>
{
x.ValueLengthLimit = int.MaxValue;
x.MultipartBodyLengthLimit = int.MaxValue;
x.MemoryBufferThreshold = int.MaxValue;
});

或者在 KestrelServer 中:

builder.Services.Configure<KestrelServerOptions>(options =>
{
options.Limits.MaxRequestBodySize = int.MaxValue;
});

但是还是不行...

这是我的请求正文信息和错误:

enter image description here error_picture

我可以使用请求内容长度约为 80Mb 的表单数据成功发布表单,但像上面这样的大小(143,118)无法工作,我是否错过了其他内容?

有人可以帮忙吗?非常感谢!

我已经尝试过了,我可以发布的最大表单数据大小约为130Mb(内容长度:133120)

编辑:这是我在 IIS 服务器上的 web.config。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
<location path="." inheritInChildApplications="false">
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".\BASE.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" hostingModel="inprocess" />
<security>
<requestFiltering>
<!-- This will handle requests up to 500MB -->
<requestLimits maxAllowedContentLength="524288000" />
</requestFiltering>
</security>
</system.webServer>
</location>
</configuration>
<!--ProjectGuid: bfaa51b3-9cb0-4908-8d5e-6289bd4f329a-->

最佳答案

最后,Steven解决了我的问题。非常感谢!

更改表单数据大小(而不是文件大小)的限制有很大不同。

您只能使用 RequestFormLimitsAttribute.ValueCountLimit装饰 Controller ,或设置 FormOptions.ValueCountLimit在 .NET 6 中的 Program.cs 或 .NET 5 中的 Startup.cs 中,以获取完整站点。

上面的方法我都试过了,一定会成功的!

这是示例代码

  • Controller :
[ValidateAntiForgeryToken]
[RequestFormLimits(ValueCountLimit = int.MaxValue)]
[HttpPost]
public async Task<IActionResult> SearchList(VM_SearchList data)

  • Program.cs (.NET 6):
builder.Services.Configure<FormOptions>(x =>
{
x.ValueCountLimit = int.MaxValue;
});

  • startup.cs (.NET 5):
services.Configure<FormOptions>(options => 
{
  options.ValueCountLimit = int.MaxValue
});

关于asp.net-core - 在 .NET 6 中提交大型表单数据并执行操作后返回 400 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72136194/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com