使用asp.net MVC 5 ... 帶有ActionResult的控制器爲jQuery調用提供Json。ASP.NET MVC ActionResult中的HttpStatusCodeResult()導致索引返回
在某些情況下,我希望當我做以下錯誤的結果返回的401(未授權)或500
一個響應的StatusCode,整個家居索引頁返回而不是:
public ActionResult _VideoPlayerJson(int? id){
...
Response.TrySkipIisCustomErrors = true; //has no effect
//Any of the following will result in the entire Index page being returned to the caller.
if (bad){return new HttpStatusCodeResult(HttpStatusCode.Unauthorized, "You must be logged in")};
if (bad2){ throw new HttpException((int)HttpStatusCode.Unauthorized, "You must be logged in");}
if (bad3) {
Response.Statuscode = 401;
return Json(new {error="some error"}, JsonRequestBehavior.AllowGet);
}
if (ok) {
//This is OK, and returns as expected
return Json(new {someobject=bob}, JsonRequestBehavior.AllowGet);
}
...}
如果我把指數控制上休息,我可以看到看到一些隱藏在引擎蓋Asp.NET神祕機制重定向結果到索引頁,並請求RETURNURL設爲原始網址。
我無法弄清楚是什麼原因造成的,或者如何擊敗它。我真的很討厭微軟有時試圖幫助我們的奧祕。
注:在Global.asax.cs中...
- 的Application_Error不會被調用(通過上面的調用)
- Application_PreRequestHandlerExecute被稱爲2倍。一旦前上方,後有一次我設置錯誤statatus和家庭/索引控制器被稱爲
ALSO之前我控制器的方法: 在Application_AuthenticateRequest調用堆棧(重定向期間)與一些內部開始功能:System.Web.dll!System.Web.Hosting.PipelineRuntime.ProcessRequestNotification (不是很有幫助)
參見[爲什麼AuthorizeAttribute重定向到登錄頁面的身份驗證和授權失敗?](http://stackoverflow.com/a/5844884/181087) – NightOwl888