簡體   English   中英

所需的防偽表單字段“__RequestVerificationToken”不存在

[英]The required anti-forgery form field “__RequestVerificationToken” is not present

這是我的另一個障礙,我希望我的網站保持跨站點攻擊,我正在通過使用asp.net mvc 5通過Ajax請求開發一個Master / Detail表單,所以,為了創建一個條目,我'通過這種方式來完成Ajax請求的過程:

$.ajax({
        url: '/Sales/Create',
        data: JSON.stringify(salesmain),
        type: 'POST',
        contentType: 'application/json;',
        dataType: 'json',
        success: function (result) {

            if (result.Success == "1") {
                window.location.href = "/Sales/index";
            }
            else {
                alert(result.ex);
            }
        }
    });

現在,它沒有像ajax請求那樣導航到Sales Controller中的Create操作,在此之前,它會拋出以下異常:

所需的防偽表單字段“__RequestVerificationToken”不存在。

我在谷歌搜索了很多但仍然不成功,這就是為什么我在這里,我讀過一些博客,說使用jquery獲取隱藏的__RequestVerificationToken字段並將其附加到表單值,包含JSON.stringify(salesmain)在一個函數中,這樣:

$.ajax({
.
.
addRequestVerificationToken(JSON.stringify(salesmain))

和功能:

function addRequestVerificationToken(data) {
data.__RequestVerificationToken = $('input[name=__RequestVerificationToken]').val();
return data;
};

另外,我已經有了以下代碼結構:

@using (Html.BeginForm())
{
  @Html.AntiForgeryToken()
  .
  .

和Create操作之前的屬性:

[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult Create([Bind(Include = "SalesId,ReferenceNo,SalesDate,SalesPerson")] SalesMain salesMain)
{
.
.

而且我也在使用jQuery 1.5,可能是它的罪魁禍首,如果不是那么我應該怎么做才能解決這個問題? 任何幫助將深表感謝,在此先感謝:)

你的addRequestVerificationToken()函數不會添加令牌,因為你已經對數據進行了字符串化(它不再是一個javascript對象,因此data.__RequestVerificationToken = $(...)什么都不做)。

您可以通過將代碼更改為來完成此工作

data: JSON.stringify(addRequestVerificationToken(salesmain)),

但是這是不必要的,因為您不需要對數據進行字符串化。 而是刪除contentType: 'application/json;',選項,以便它使用默認的application/x-www-form-urlencoded; charset=UTF-8' application/x-www-form-urlencoded; charset=UTF-8'並使用

data: addRequestVerificationToken(salesmain),

或者更好的是,如果您使用HtmlHelper方法正確生成了視圖,並且您的輸入包含正確的名稱屬性( name="SalesId"name="ReferenceNo"等),那么您只需使用

data: $('form').serialize(),`

這將正確序列化您表單中的所有輸入,包括令牌。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM