Ajax调用C# MVC同时发送Post和Get请求

4

我看过几种用于进行ajax调用的解决方案,但没有发现任何关于这个问题的提及,我感觉可能是特定于我所在的环境。我的控制器:

    [HttpPost]
    public ActionResult ChangeDefualtCC(string a)
    {

        return Json("ok");
    }
    [HttpGet]
    public ActionResult ChangeDefualtCC()
    {

        return Json("ok");
    }

JS:

    $("nevermind").change(function () {

    $.ajax({
        type: "POST",
        url: "/Account/ChangeDefualtCC",
        dataType: "json",
        data: {
            a: "A"
        },
        success: function (data) { console.log(data)},
        error: function (data) { console.log("error");}
    });
});

控制器代码从未执行,这是我在ajax调用后在chrome中看到的内容:
编辑2:页面触发了[HttpGet]方法。
编辑: 我也标记了Ektron,因为它被用在这个项目中,可能影响调用。
我的路由: 更新: 我尝试过使用Get和Post,并返回到我所在的视图,每次都会得到302。 有什么想法吗?

1
你拼错了“Default”的单词 :) - Mansfield
我觉得这里缺少了些什么。在Chrome开发工具中,发起者列的完整URL是什么? - Ant P
一般来说,如果您的端点根本没有被访问,您需要查看您的路由。请发布您的路由代码,也许我们可以提供帮助。 - Steven Hansen
这个项目也使用了Ektron,可能它自己的路由正在影响调用。有人有相关经验吗? - edank
Ektron主要是基于Web表单的; 如果你想尝试在Ektron中使用MVC,你必须添加自己的路由。 - Brian Oliver
显示剩余9条评论
3个回答

0

看起来它找到了 "get",因为您在该调用中没有参数。我认为您可能错过了 ajax 调用的内容类型,因此模型绑定器无法将您的帖子内容解析为参数。

$.ajax({
        type: "POST",
        url: "/Account/ChangeDefualtCC",
        contentType: 'application/json; charset=utf-8',       
        dataType: "json",
        data: {
            a: "A"
        },
        success: function (data) { console.log(data)},
        error: function (data) { console.log("error");}
    });

gabanim,我已经添加了contentType,但仍然调用的是Get方法。 - edank
很抱歉没有帮到您。不过我想知道,您的问题是否与发送参数的方式有关。GET方法不需要参数就可以找到。也许如果您改变它们的顺序——即使POST不带参数,而GET带上字符串参数——您就可以缩小问题范围,看看是否是参数问题。 - gabnaim
昨天我也尝试了这个,我尝试了许多不同的参数组合,但它总是进入Get方法。但它从来没有直接进入Get方法,而是先收到一个302。当我尝试用表单包装并提交时,发生了同样的事情。 - edank

0

您的代码似乎完全正确。这可能不是精确的解决方案,但可以尝试一下,也许会有作用。

 $("nevermind").change(function () {

     $.post("/../Home/ChangeDefualtCC", { a: "A" }, function (data) {

        console.log(data)
     });
});

0

我们的项目与CMS Ektron集成。后来发现Ektron在C#代码之前被调用,并且对没有尾随URL的任何URL都有一定影响。

感谢所有的帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接