我已经从.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);
就像上面的控制器代码一样,我得到了一个&#34; Bad Gateway&#34;错误,但如果我使用
return View(hero);
我可以在我创建的视图中显示英雄和相关的超级大国。
我做错了什么?
答案 0 :(得分:2)
尝试:
return Json(hero, JsonRequestBehavior.AllowGet);
请参阅this answer了解其重要性的原因。 GET
请求默认拒绝:
默认情况下,ASP.NET MVC框架不允许您使用JSON有效内容响应HTTP GET请求。如果您需要发送JSON以响应GET,则需要使用JsonRequestBehavior.AllowGet作为Json方法的第二个参数来显式允许该行为。但是,恶意用户有可能通过称为JSON Hijacking的进程获得对JSON有效负载的访问权限。您不希望在GET请求中使用JSON返回敏感信息。有关详细信息,请参阅Phil http://haacked.com/archive/2009/06/24/json-hijacking.aspx/的帖子。
答案 1 :(得分:1)
你试过这个:
services.AddMvc()
.AddJsonOptions(options => {
options.SerializerSettings.ReferenceLoopHandling =
Newtonsoft.Json.ReferenceLoopHandling.Ignore;
});