ASP.NET MVC JsonResult 返回 500
Posted
技术标签:
【中文标题】ASP.NET MVC JsonResult 返回 500【英文标题】:ASP.NET MVC JsonResult return 500 【发布时间】:2011-03-08 00:52:43 【问题描述】:我有这个控制器方法:
public JsonResult List(int number)
var list = new Dictionary <int, string> ();
list.Add(1, "one");
list.Add(2, "two");
list.Add(3, "three");
var q = (from h in list where h.Key == number select new
key = h.Key,
value = h.Value
);
return Json(list);
在客户端,有这个 jQuery 脚本:
$("#radio1").click(function()
$.ajax(
url: "/Home/List",
dataType: "json",
data:
number: '1'
,
success: function(data)
alert(data)
,
error: function(xhr)
alert(xhr.status)
);
);
我总是收到错误代码 500。有什么问题?
谢谢
【问题讨论】:
这适用于 ASP.NET MVC 2,对吗? JsonRequestBehavior.AllowGet 要求从版本 2 开始。 【参考方案1】:如果你看到实际的反应,它可能会说
此请求已被阻止,因为 敏感信息可能是 向第三方网站披露 在 GET 请求中使用它时。到 允许 GET 请求,设置 JsonRequestBehavior 到 AllowGet。
您需要使用重载的Json
构造函数来包含JsonRequestBehavior
的JsonRequestBehavior.AllowGet
,例如:
return Json(list, JsonRequestBehavior.AllowGet);
这是您的示例代码中的样子(请注意,这也会将您的 int
s 更改为 string
s,否则您会收到另一个错误)。
public JsonResult List(int number)
var list = new Dictionary<string, string>();
list.Add("1", "one");
list.Add("2", "two");
list.Add("3", "three");
var q = (from h in list
where h.Key == number.ToString()
select new
key = h.Key,
value = h.Value
);
return Json(list, JsonRequestBehavior.AllowGet);
【讨论】:
另外提到你可以覆盖 jQuery 中的 JSON 行为来使用 POST。 对,特别是如果您要返回任何可能被视为敏感的内容,请使用[HttpPost]
装饰您的控制器方法并改用jQuery $.post()
函数(请参阅api.jquery.com/jQuery.post)
或者在你的ajax函数中指定type: "POST"
。【参考方案2】:
虽然 JustinStolle 的回答解决了您的问题,但我会注意框架提供的错误。除非您有充分的理由希望使用 GET
方法发送数据,否则您应该使用 POST
方法发送数据。
问题是,当您使用 GET
方法时,您的参数会添加到您的请求 url,而不是添加到请求的标头/正文中。这似乎是一个微小的差异,但错误暗示了为什么它很重要。发送方和接收方之间的代理服务器和其他潜在服务器倾向于记录请求 url,并且经常忽略请求的标头和/或正文。此信息通常也被视为不重要/秘密,因此默认情况下,url 中公开的任何数据都不太安全。
最好的做法是使用POST
方法发送您的数据,以便将您的数据添加到正文而不是url。幸运的是,这很容易改变,尤其是因为您使用的是 jquery。您可以使用 $.post
包装器或将 type: "POST" 添加到您的参数中:
$.ajax(
url: "/Home/List",
type: "POST",
dataType: "json",
data: number: '1' ,
success: function (data) alert(data) ,
error: function (xhr) alert(xhr.status)
);
【讨论】:
以上是关于ASP.NET MVC JsonResult 返回 500的主要内容,如果未能解决你的问题,请参考以下文章
加载 ASP.Net MVC JSONResult jQuery DataTables
ASP.Net MVC:如何基于原始Json数据创建JsonResult
asp.net mvc自定义JsonResult类来防止MaxJsonLength超过限制