首页 > 解决方案 > antiforgerytoken 和数据发送但控制器方法中的数据为空

问题描述

我尝试通过 html 页面上的以下代码将 antiforgerytoken 和 yesiTest 由一些数据(它不为空)填充到控制器。

 var token = document.querySelector('input[name="__RequestVerificationToken"]').value;

    $.ajax({
        url: '@Url.Action("/TestCevabı")',
        type: 'post',
        data: { __RequestVerificationToken: token, yeniTest: JSON.stringify(yeniTest)},
        contentType: 'application/x-www-form-urlencoded; charset=utf-8',
        traditional: true
    });

控制器方法如下

    [HttpPost]
    [ValidateAntiForgeryToken]
    public bool TestCevabı(Test yeniTest)
    {
        ///
    }

我在控制器方法中通过了 ValidateAntiForgeryToken。但是在 TestCevabı 方法中的yeniTest 为空。

标签: javascriptajaxasp.net-mvc

解决方案


我改变了控制器方法如下。

[HttpPost]
[ValidateAntiForgeryToken]
public bool TestCevabı(string yeniTest)
{
    ///
}

并将以下代码添加到 TestCevabıService

        Test çözülenTest = new Test();
        using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(testJsonFormat)))
        {
            DataContractJsonSerializer ser = new DataContractJsonSerializer(çözülenTest.GetType());
            çözülenTest = ser.ReadObject(ms) as Test;
            ms.Close();
        }     

现在 antforgerytoken 通过并填充了测试对象


推荐阅读