2016-07-26 82 views
0

我已經從.NET Web應用程序模板創建了一個Web應用程序。這個應用程序應該顯示英雄和他們的超級大國。將.NET MVC模型返回爲JSON導致Bad Gateway

這是我控制器方法:

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); 

像上面我收到了一個「Bad Gatewa」 y「的錯誤,但如果我使用

return View(hero); 

我可以在我創建的視圖中顯示英雄和相關的超級大國。

我在做什麼錯?

+0

嘗試刪除您的斷點(http://stackoverflow.com/questions/34420397/handling-json-circular-reference-exception-in-asp-net- 5) – Tonio

+0

有些話題,但'英雄'類不被視爲'模型',而是作爲一個數據結構 – dios231

+0

如果你的行爲不是:'public JsonResult GetHero(int id)'? – pookie

回答

2

嘗試:

return Json(hero, JsonRequestBehavior.AllowGet); 

this answer爲什麼這很重要。 GET默認情況下請求被拒絕:

默認情況下,ASP.NET MVC框架不允許您響應具有JSON負載的HTTP GET請求。如果您需要發送JSON以響應GET,則需要使用JsonRequestBehavior.AllowGet作爲Json方法的第二個參數來顯式允許該行爲。但是,惡意用戶有機會通過稱爲JSON劫持的過程訪問JSON有效負載。您不希望在GET請求中使用JSON返回敏感信息。欲瞭解更多詳情,請參閱菲爾的帖子http://haacked.com/archive/2009/06/24/json-hijacking.aspx/

+0

只是'JSON''返回JsonResult(英雄,JsonRequestBehavior.AllowGet);'? – Tonio

+0

我得到「不能解析符號JsonRequestBehavior」,但是這也不起作用:return Ok(hero); –

+0

@KarlEriksson它是'System.Web.Mvc'命名空間的一部分,所以它應該解決:https://msdn.microsoft.com/en-us/library/system.web.mvc.jsonrequestbehavior(v=vs.118)的.aspx – ediblecode

1

你有沒有嘗試過這樣的:

services.AddMvc() 
    .AddJsonOptions(options => { 
     options.SerializerSettings.ReferenceLoopHandling = 
      Newtonsoft.Json.ReferenceLoopHandling.Ignore; 
    }); 
相關問題