好吧,这很奇怪,但是...... 这是我的操作代码(部分):
[Route(nameof(BackForm))]
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> BackForm(BackFormDto model, CancellationToken token = default)
{
try
{
if(!ModelState.IsValid)
{
//await Do some
}
}
catch
{
// throw some error
}
}
这是我的观点(部分):
<form asp-controller="Home" asp-action="BackForm" data-ajax="true" data-ajax-method="POST" data-ajax-update="#Search">
@Html.TextBox("Name", null, new { placeholder = "Name", @class = "form-control mt-1 mb-2" })
@Html.TextBox("Cont", null, new { placeholder = "E-Mail", @class = "form-control my-2" })
@Html.TextArea("Txt", null, new { placeholder = "Msg", @class = "form-control mt-2" })
<input id="btn" type="button" value="Ok" data-bs-toggle="modal" data-bs-target="#myModal" />
</form>
在这里,你可以看到这里表单中没有@Html.AntiForgeryToken()。 但效果很好,Action 工作正常,ModelState 有效......
.net8、VS2022、本地调试实例
有什么想法吗?)
噢...我发现了。 微软出乎意料
如此处所写
表单标签助手
生成隐藏的请求验证令牌以防止跨站点请求伪造(与 HTTP Post 操作方法中的 [ValidateAntiForgeryToken] 属性一起使用时)
因此,当使用标签助手时,您不再需要 @Html.AntiForgeryToken() 。
一切都变得显而易见了。对不起。 RTFM)))