ajax 将数据发送到我的控制器后,我在视图中的 C# MVC 应用程序中收到 HTTP 错误 431。 这是我视图中的代码:
$.ajax({
type: "POST",
url: "@Url.Action("SaveElectionData")",
dataType: "text",
data: { 'formData': sendData },
success: function (msg) {
alert("back in view, success");
$("form").submit();
},
error: function (req, status, error) {
alert("back in view, fail");
$("form").submit();
}
});
当我运行应用程序时,ajax 会将数据发送到我的控制器。 控制器处理数据并将字符串返回给ajax。 我收到警报
back in view, success
。 一旦我单击按钮关闭警报,我就会收到 431 错误。
当我查看开发工具和网络时,我看到的是:
当我点击
Updated
时,我看到的是:
我在运行 Visual Studio 2022 的开发机器(Mac)上运行它,我假设 IIS Express(由 Visual Studio 提供,除非它在 Mac 上与 Windows 机器上不同),并且我刚刚清除了浏览器(chrome) )饼干。 另外,根据第二张图,请求头的内容长度只有182。
这是表单视图中的代码:
@using (Html.BeginForm("Updated", "OnlineEnrollment", FormMethod.Post))
{
}
我的表单中没有任何元素,因为 ajax 已经将数据发送到控制器。
那么为什么我会收到此 431 错误?
有什么想法吗?
编辑1:
这是我的program.cs 文件中的代码,如下所示:
namespace AccuRecordV3
{
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.ConfigureKestrel((context, options) =>
{
options.Limits.Http2.MaxRequestHeaderFieldSize = 40960;
});
});
}
}
如果您查看网络选项卡,您会发现实际上是 Kestrel 返回此 413 响应以及消息“请求标头字段太大”。
您可以在那里配置很多选项,https://learn.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel/options?view=aspnetcore-6.0和
MaxRequestHeadersTotalSize
应该成为您需要的人。
有多种方法可以获取 431 错误,它们适用于任何 Web 技术,而不仅仅是 Asp.Net:
特别是在 Asp.Net 或 Asp.Net Core 中,默认的 TempData 存储在 cookie 中,因此使用大量 TempData 会使您的 cookie 太大。
选项:
MaxRequestHeadersTotalSize
设置。