Ajax GET永远不会成功,但POST是(相同的代码)

时间:2015-11-24 10:28:25

标签: jquery ajax asp.net-mvc

我不明白为什么我的代码在方法设置为'POST'时工作正常但在'GET'时没有。后端代码在两种情况下都能完美执行,但在前端我最终出现错误:当方法为'GET'时处理程序,只有'POST'让我进入成功:处理程序。

我从后端返回的对象设置了AllowGet,我没有向该方法发送任何参数。为什么我会收到500内部服务器错误?

// Front end
$.ajax({
    cache: false,
    url: '@Url.Action("GetBusinessList")',
    method: 'GET',
    dataType: 'json',
    success: function (data) {
        console.log(data);
        // do some stuff
    },
    error: function (xhr, status, text) { 
        console.log(xhr.status); // 500
        console.log(xhr.text); // undefined
        console.log(xhr.responseText); // my error page's html
    }
});
// The backend code
public JsonResult GetBusinessList()
{
    //...

    JsonResult returnObj = new JsonResult
    {
        Data = new
        {
            MyList = businessList // this is a List<MyType>
        },
        ContentEncoding = System.Text.Encoding.UTF8,
        JsonRequestBehavior = JsonRequestBehavior.AllowGet
    };

    return Json(returnObj);

重申一下:当方法设置为'POST'和'GET'时,后端代码正在成功执行。 jquery代码可能有问题,但我不知道为什么。

对动作执行[HttpGet]什么都不做 - 实际上我有自己的属性来检查HttpContext.Request.IsAjaxRequest。取消这个并取代HttpGet没有任何效果。

3 个答案:

答案 0 :(得分:3)

默认情况下,asp.net mvc不允许带有JSON有效负载的HTTP GET请求。您需要使用 JsonRequestBehavior.AllowGet 作为 Json 方法的第二个参数来显式允许该行为,如下所示。

return Json(returnObj, JsonRequestBehavior.AllowGet);

答案 1 :(得分:2)

或者你可以简单地返回returnObj而不是Json(returnObj)。那已经包含了必要的行为。

答案 2 :(得分:0)

您是否尝试过将HTTP Get属性添加到控制器:

[HttpGet]
public JsonResult GetBusinessList()
{
    ....
}

如果您打开开发人员工具窗口,则应在控制台窗口中显示错误消息。

您还需要在问题说明中检查您正在呼叫的URL,这与您的控制器方法不同。