我不明白为什么我的代码在方法设置为'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没有任何效果。
答案 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,这与您的控制器方法不同。