javascript - POST 成功执行 OnPost() 后返回 400 (RazorPages)
问题描述
我在 asp.net 核心中使用 RazorPages。
当我使用 jQuery/Ajax 创建对 RazorPage 的发布请求时,OnPost() 方法运行没有错误,并且响应状态代码设置为 200。
HttpContext.Response.StatusCode = 200;
在 Chrome 控制台中,我的请求返回了错误代码 400,并带有消息“加载资源失败”。指向错误源的链接将我带到VM6.js的第 38 行。
类似的代码适用于另一个 RazorPage,所以我认为它可能试图呈现我的页面 (.cshtml) 并出错。我通过在加载 cshtml 文件时输出到控制台来证明这个理论是错误的,而在发出 POST 请求时我没有得到这个输出。
这是工作页面和损坏页面共享的用于提交我的表单的 Javascript:
$("[name|='form']").submit(function() {
var formData = $(this).serialize();
$.ajax({
type: "POST",
data: formData,
success: function() {
$("#success").toast("show");
},
error: function(xhr) {
if (xhr.status == 429) {
$("#ratelimit").toast("show");
} else {
$("#error").toast("show");
}
}
});
return false;
});
如何确保我的网络服务器返回代码 200 而不是 400?
解决方案
要修复 400 错误,我需要在表单中包含 method="post"。这意味着包含验证令牌并且不会引发错误。
因为我的页面包含 C# 代码,如果未事先调用 OnGet() 方法,则会引发错误,这会在每次发布请求后导致 500 错误,尽管页面未加载。
我if(~~~ == null) return;
在我的 cshtml 顶部添加了它,它现在似乎可以工作了。
推荐阅读
- javascript - 通过 UIKit 模式向数组添加元素在 vuejs 中不起作用
- scala - 执行捕获变量的嵌套函数分配
- kotlin - Kotlin 泛型类型不匹配
- kubernetes - 如何设置 Kubernetes 以支持动态添加的子域?
- excel - 交叉引用具有工作表编号的单元格
- elasticsearch - 查找日志文件的 grok 模式
- node.js - 在 node.js 类中找不到方法
- .net - 如何创建 Microsoft Azure 移动应用程序
- flutter - ParentDataWidget 的使用不正确。- 如何解决?
- flutter - Flutter Bloc 事件未按正确顺序发生