我正在查看 ASP.NET Core 8 MVC 项目的订阅页面。
在安全性方面,这两种方法相互兼容吗?
我确实更喜欢 AJAX,因为它允许我使用 JS 烤面包机进行用户体验/反馈(无效电子邮件等)。
选项 1:在视图中,使用顶部的
@model
和引用该 form
的 model
元素。
<form asp-controller="Account" asp-action="AddNewUser" method="post" id="form-login">
//Several div with the required properties
<div class="form-group">
@Html.EditorFor(model => model.email, new { htmlAttributes = new { @class = "form-control" } })
</div>
</form>
选项2:在视图中创建一个
AntiForgeryToken
,在JS中创建一个AJAX请求以将这些信息发送到同一端点。
let token = $('[name=__RequestVerificationToken]').val();
$.ajax({
url: '/Account/AddNewUser/',
type: 'POST',
async: true,
data: {
__RequestVerificationToken: token,
//Required properties
},
success: function (response) { ... }
error: function () { ... }
complete: function () { ... }
});
这两种方法相互兼容吗?
是的
FormTagHelper 将防伪标记注入 HTML 表单元素。 Razor 文件中的以下标记会自动生成防伪令牌:
<form method="post">
<!-- ... -->
</form>
ASP.NET Core 添加了一个隐藏表单字段,类似于以下示例:
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8NrAkS ... s2-m9Yw">
然后获取 name="__RequestVerificationToken" 的 AntiForgeryToken 并在 JS 中创建一个 AJAX 请求来发送这些信息。
您可以阅读ASP.NET Core 中的防伪了解更多信息。