ValidateAntiForgeryToken 无需 Html.AntiForgeryToken() 即可工作

问题描述 投票:0回答:1

好吧,这很奇怪,但是...... 这是我的操作代码(部分):

[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、本地调试实例

有什么想法吗?)

c# asp.net-mvc asp.net-ajax antiforgerytoken
1个回答
0
投票

噢...我发现了。 微软出乎意料

此处所写

表单标签助手

生成隐藏的请求验证令牌以防止跨站点请求伪造(与 HTTP Post 操作方法中的 [ValidateAntiForgeryToken] 属性一起使用时)

因此,当使用标签助手时,您不再需要 @Html.AntiForgeryToken() 。

一切都变得显而易见了。对不起。 RTFM)))

© www.soinside.com 2019 - 2024. All rights reserved.