Asp.Net MVC和webapi CSRF防攻击ajax使用方法

一、MVC提交

视图

复制代码
@using (Html.BeginForm())
    {
        @Html.AntiForgeryToken()
        <p>
            <strong><em>*</em>姓名:</strong><input type="text" id="name" name="name" />
        </p>
        <p>
            <strong><em>*</em>年龄:</strong><input type="text" id="age" name="age" />
        </p>
        <p>
            <input type="submit" value="提交" />
        </p>
    }
复制代码

 

控制器

        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult PostAdd(FormCollection FromValue)
        {
        //
        }        

 

二、ajax+mvc提交

js

复制代码
$("form").submit(function () {
                //var token = $("input[name='__RequestVerificationToken']").val();
                var token = $('@Html.AntiForgeryToken()').val();
                var postData = { id: 123, name: "张三", __RequestVerificationToken: token };
                $.ajax({
                    url: '/api/Test/PostData/666',
                    type: "post",
                    data: postData,
                    success: function (res) {
                        console.log(res)
                    },
                    error: function () {
                        console.log("错误")
                    }
                })
                return false;
            })
复制代码

 

控制台

[ValidateAntiForgeryToken]
        public string PostData(string id,string name)
        {
            string res = "id==" + id + ",name==" + name;
            return res;
        }

 

三、ajax+webapi

js

复制代码
$("form").submit(function () {
                var postData = { id: 123, name: "李四"};
                $.ajax({
                    url: '/api/Test/PostData/666',
                    headers: {'RequestVerificationToken': '@ApiValidateAntiForgeryToken.GenerateAntiForgeryTokenForHeader()'},
                    type: "post",
                    contentType: 'application/json',
                    data: JSON.stringify(postData),
                    success: function (res) {
                        console.log(res)
                    },
                    error: function () {
                        console.log("错误")
                    }
                })
                return false;
            })
复制代码

 

webapi

[HttpPost]
        [ApiValidateAntiForgeryToken]
        public string PostData(dynamic obj)
        {
            string res = "id===" + obj.id + ",name===" + obj.name+",ref="+Request.Headers.Referrer.Host;
            return res;
        }
//ApiValidateAntiForgeryToken是自定义过滤器
posted @   WebApi  阅读(288)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 字符编码:从基础到乱码解决
CopyRight © 博客园 WebAPI
点击右上角即可分享
微信分享提示