发布:2023/12/7 15:22:24作者:大数据 来源:大数据 浏览次数:826
ValidateAntiForgeryToken ajax
[ValidateAntiForgeryToken]
为防止CSRF,asp.net core会在form中自动注入一个隐藏域防止攻击
自动加入:
<form asp-action="create">
</form>
或者使用beginform自动加入隐藏域
@using (Html.BeginForm("ChangePassword", "Manage")) { ... }
或手动加入:
<form method="post" action="create">
@Html.AntiForgeryToken()
</form>
隐藏域代码大致如下:
<input name="__RequestVerificationToken" type="hidden" value="CfDJ8NrAkS ... s2-m9Yw">
在asp.net或asp.net core mvc中,对于删除操作,微软加了token,这样的好处是防止跨站攻击,但如果用平常的ajax删除操作执行时会返回500错误,因此需要加入token进行删除,核心代码实现如下
1 2 3 4 5 6 7 8 9 10 11 |
// POST: Schedules/Delete/5 [HttpPost, ActionName("Delete")] [ValidateAntiForgeryToken] public ActionResult DeleteConfirmed(long id) { Schedule schedule = dbcontext.Schedule.Find(id); schedule.U_User.Clear(); dbcontext.Schedule.Remove(schedule); dbcontext.SaveChanges(); return RedirectToAction("Index", "Admin"); } |
以下是两种方法实现均可,url根据自己情况填写:
第一种:将token加到form里和数据一起提交
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
$(".del").click(function () { //$('#myModal').modal('show'); if (confirm("确定删除吗")) { var data = {}; var token = $('@Html.AntiForgeryToken()').val(); data["__RequestVerificationToken"] = token; url = $(this).attr("data-href"); //console.log(url,token,data); $.ajax({ url: url, type: "post", data: data, success: function (e) { window.location.reload(); } }) return true; } else { return false; } }); |
第二种方法加到headers里,在头标识中加入:url可根据自己情况修改
推荐使用此方法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
if (confirm("确定删除选中的记录吗")) { $.ajax({ type: "POST", url: "/@ViewContext.RouteData.Values["controller"]/Delete", data: { ids: arrIds }, headers: { "RequestVerificationToken":$('@Html.AntiForgeryToken()').val()}, success: function (data, state) { window.location = "@ViewContext.RouteData.Values["controller"]"; }, error: function (data, state) { alert("操作失败") } }); } |
微软官方参考:https://github.com/aspnet/AspNetCore.Docs/blob/master/aspnetcore/security/anti-request-forgery/sample/MvcSample/Views/Home/Ajax.cshtml
© Copyright 2014 - 2025 柏港建站平台 ejk5.com. 渝ICP备16000791号-4