Day16 - Ajax 加上 Antiforgery Token (一)

这篇内容延续上一篇的部份,来加上 Antiforgery Token 的给定及验证 !


Case01

Action AddOrderItem() 的部份,加上 ValidateAntiForgeryToken Attribute

[HttpPost, Route("api/[controller]/[action]")]
[ValidateAntiForgeryToken]                        // 新增
public IActionResult AddOrderItem([FromForm]int index)
{
    ViewData["OrderItemIndex"] = index;

    return PartialView("/Views/Day16/OrderItem.cshtml", new OrderItem() );
}

此时,在 ajax 未给定 Antiforgery Token 的情况下,发送 request 会发生 http status code 400 的错误

View 的 ajax request header 加上给定 Antiforgery Token 的语法

  • form tag helper 预设会自动产生 input name 为 __RequestVerificationToken 的 dom,这个 dom 存放的值,就是 Antiforgery Token
  • request header 加上 key 为 RequestVerificationToken , value 为上述 Antiforgery Token 的值
// 新增
window.AntiForgeryToken = document.querySelectorAll('input[name="__RequestVerificationToken"]')[0].value;

window.AddItem = function () {

    const requestBody = new URLSearchParams();
    requestBody.append('index', ItemsCount);

    fetch(AddItemUrl, {
        method: 'POST',
            headers: {
                'Content-Type': 'application/x-www-form-urlencoded',
                'RequestVerificationToken': AntiForgeryToken,           @* 新增 *@
            },
            body: requestBody,
        })
    .then(response => response.text())
    .then(data => {
        $('#Items').append(data);
        ItemsCount++;
    })
}

此时,发送 request 到後端,就会正常了 !


这篇先到这里,下一篇来看看进入轻前端 Vue 前的范例 !


<<:  DAY 4 Big Data 5Vs – Volume(容量) - S3+Lake Formation

>>:  Day 01 : 导言 - 知识是如何形成的?

D30: 工程师太师了: 第16话

工程师太师了: 第16话 杂记: 今天终於是第三十天了, 漫长的三十天, 每天都要努力发文, 有监於...

iOS APP 开发 OC 第二十二天,Extension

tags: OC 30 day 延展: Extension 是一个特殊分类,所以延展也是类的一部分。...

【第二十天 - Graph 介绍】

Q1. Graph 是什麽 Graph 定义:一个 graph 由 数个点( vertex )与数个...

在 openSUSE Leap 15.3 上轻松安装呒虾米

Linux 的 Distro 很多,今天笔记一下在 openSUSE 上启用呒虾米的纪录。 从系统设...

[Day25]C# 鸡础观念- 共产主义者~静态成员

农场里的鸡饲料都是大把大把的撒在地上, 每只鸡都去吃那些饲料,吃完就没了, 而不像其他宠物有独立的饲...