一个非常菜鸟的问题,但我不能完全理解为什么在下面的代码中我只能使用HttpPost(因此它可以运行)而不是HttpGet。有人可以解释一下吗?
[HttpPost]
public ActionResult checkNumFocuses()
{
//stuff happening
if (count == 3)
{
return Json(false);
}
else
{
return Json(true);
}
}
以上是我的动作方法,返回true / false。
这是前面的ajax调用:
$.ajax({
type: "POST",
url: '@Url.Action("checkNumFocuses", "Home")',
dataType: "json",
success: successFunc,
error: errorFunc
});
function successFunc(data, status) {
if (data == false) {
$(".alert").show();
$('.btnfc').addClass('disabled');
}
}
我无法理解为什么我删除HttpPost
属性(默认为GET)并将ajax调用中的类型从POST更改为GET。
答案 0 :(得分:4)
是。您可以从GET方法返回Json。但请确保使用Json
方法重载,该重载采用JsonRequestBehavior
枚举。
在这里,您明确表示要从GET操作方法返回json数据。
public ActionResult checkNumFocuses()
{
//stuff happening
if (count == 3)
{
return Json(false,JsonRequestBehavior.AllowGet);
}
else
{
return Json(true,JsonRequestBehavior.AllowGet);
}
}
目前,您正在获得500错误响应(而不是使用有效数据200 OK),因为您尝试从GET操作方法返回json数据(而不指定JsonRequestBehavior枚举值)。由于响应不是200 OK,它将进入你的ajax调用的错误处理程序部分。
理想情况下,GET操作应该是幂等的。这意味着无论您执行多少次,它都不应该更改任何数据(并返回相同的响应)。在您的情况下,您的方法不是udpating任何数据。因此,只要您确定人们可以在浏览器选项卡中访问此URL并查看结果,您可以将其保留为GET方法。
通常在ASP.NET MVC应用程序中,GET方法应该返回一个视图/视图响应(标记),通常POST方法对发布的表单数据/ ajax数据进行一些处理(例如:更新一些数据)等)并返回一个响应, 可以 为 JSON 。但是如果你真的想从你的GET动作方法返回Json数据,你必须明确指定使用上面的方法我们做了
当然,Web API有一个不同的概念(并且在幕后实现)
答案 1 :(得分:1)
您可以使用GET。但是你还需要在JsonRequestBehavior
[HttpGet]
public ActionResult checkNumFocuses()
{
....
return Json(true, JsonRequestBehavior.AllowGet);
}