我已经从.NET web应用程序模板创建了一个Web应用程序。这个应用程序应该显示英雄和他们的超能力。
这是我的控制器方法:
public IActionResult GetHero(int id)
{
if (!ModelState.IsValid)
{
return HttpBadRequest(ModelState);
}
Hero hero = _context.Hero.Include(m => m.SuperPowers).Single(m => m.Id == id);
if (hero == null)
{
return HttpNotFound();
}
return Json(hero);
}这是我的模型
public class Hero
{
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public virtual ICollection<SuperPower> SuperPowers { get; set; }
}如果我用
return Json(hero);就像上面的控制器代码一样,我得到了一个“坏网关”错误,但是如果我使用
return View(hero);我可以在我创造的视图中展示英雄和相关的超级力量。
我做错了什么?
发布于 2016-07-26 12:49:49
尝试:
return Json(hero, JsonRequestBehavior.AllowGet);有关这一点重要的原因,请参见this answer。默认情况下,拒绝GET请求:
默认情况下,JSON框架不允许您使用ASP.NET有效负载响应HTTP请求。如果您需要发送响应于GET的JSON,则需要使用JsonRequestBehavior.AllowGet作为Json方法的第二个参数,从而显式地允许这种行为。但是,恶意用户有可能通过称为JSON劫持的进程访问JSON有效负载。您不希望在GET请求中使用JSON返回敏感信息。有关更多细节,请参见菲尔在http://haacked.com/archive/2009/06/24/json-hijacking.aspx/上的帖子。
发布于 2016-07-26 13:01:43
你试过这个吗?
services.AddMvc()
.AddJsonOptions(options => {
options.SerializerSettings.ReferenceLoopHandling =
Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});https://stackoverflow.com/questions/38590243
复制相似问题