为什么我无法获得Json(.net mvc项目)的返回值?

时间:2017-01-26 03:37:48

标签: jquery json ajax asp.net-mvc

这应该是一个小问题,但我被困在这里几个小时。 它一直在控制台中显示500个错误。没有任何警告。似乎Json()似乎不起作用。我试过一个断点,tempAnswers有一个TempAnswerModels列表。

public class TempAnswerModel
    {
        public int QuestionId { get; set; }
        public int Value { get; set; }
        public int Id { get; set; }
    }

我的ajax代码,

var sendData = { 'Id': @ViewBag.Id };
$.get('@Url.Action("LoadTempAnswers", "Questions")',sendData,function(result) {

                alert(result);
            },"json");

控制器中的代码,

    [HttpGet]
    public ActionResult LoadTempAnswers(int? Id)
    {
        //check if there are temp answers in the table
        var tempAnswers = TempAnswerDb.GetAllTempAnswersbyId(id);
        return Json(tempAnswers);
    }

2 个答案:

答案 0 :(得分:1)

您正在进行GET调用,默认情况下,ASP.NET MVC框架不允许您使用JSON有效负载响应HTTP GET请求,以防止JSON Hijacking的攻击。<​​/ p>

通过设置JsonRequestBehavior(默认为DenyGet

更改控制器代码以允许GET
[HttpGet]
public ActionResult LoadTempAnswers(int? Id)
{
    var tempAnswers = TempAnswerDb.GetAllTempAnswersbyId(id);
    return Json(tempAnswers, JsonRequestBehavior.AllowGet);
}

答案 1 :(得分:0)

另一种解决方案是制作动作[HttpPost],然后应用[ValidataAntiForgeryToken]属性。然后,您可以将防伪令牌发布到操作中,并确保它不会被劫持。

JsonRequestBehaviour.AllowGet是一个大锤的方法,正如@stephenmuecke强调的那样,是为了防止JSON劫持攻击。

此外,由于这是一个json请求,您可能希望使控制器操作异步。