【问题标题】:Ajax Call in MVC Core2 Bad RequestMVC Core2 错误请求中的 Ajax 调用
【发布时间】:2018-01-23 15:12:02
【问题描述】:

我正在将一个网站折射到 MVC Core 2。对于我的大多数 Ajax 调用,我一直在使用 .Get() 简写,没有任何问题。我有一个需要使用 $ajax() 的 AJAX 调用,由于某种原因,我不断收到错误的请求错误。请记住,此代码当前正在一个 aspx 网站中运行(除了我重构时更改的 url)。

function get_Data() {
    $.ajax({
        type: "POST",
        contentType: "application/json; charset=utf-8",
        url: "/Home/Get_Index_Values",
        data: JSON.stringify(),
        dataType: "json"
    }) //End Ajax Call
.Done({})
.fail(function(ts){
alert(ts.response);
})

我的方法现在在 Home Controller 中。使用简写 .get() 我一直在使用这个签名没有问题:

public JsonResult Get_Index_Values()
{
 stuff here
}

这对 $ajax 调用不起作用,所以我尝试了:

      [HttpPost]
    public ActionResult Get_Index_Values()

这也不起作用。 然后我尝试将 ajax url 修改为以下内容并匹配上述控制器方法签名(这里有很多迭代):

"Home/Get_Index_Values"
/Home/Get_Index_Values
/Get_Index_Values
Get_Index_Values
https://localhost:44339/Home/Get_Index_Values

一切都无济于事。我可以重写它以使用简写 .get(),但我有兴趣让它工作,这样我就可以看到我做错了什么。

【问题讨论】:

    标签: ajax asp.net-core-mvc


    【解决方案1】:

    发现问题。我在启动文件中添加了 AutoValidateAntiforgeryTokenAttribute。因此,令牌不匹配。必须执行以下操作才能使其工作:

    beforeSend: function (xhr) {
        xhr.setRequestHeader("XSRF-TOKEN",
            $('input:hidden[name="__RequestVerificationToken"]').val());
    

    http://www.talkingdotnet.com/handle-ajax-requests-in-asp-net-core-razor-pages/获得此信息

    【讨论】:

    • 别忘了配置防伪服务寻找 X-CSRF-TOKEN 标头:services.AddAntiforgery(o => o.HeaderName = "XSRF-TOKEN");
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 2013-08-03
    相关资源
    最近更新 更多