2016-05-31 56 views
0

使用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 (不是很有幫助)

+0

參見[爲什麼AuthorizeAttribute重定向到登錄頁面的身份驗證和授權失敗?](http://stackoverflow.com/a/5844884/181087) – NightOwl888

回答

0

好的...只是避免使用401,一切都很好。 使用禁止(403)在沒有重定向的情況下產生所需的結果。

出於某種原因,ASP.NET MVC重定向所有401的家庭....這是當你試圖JSON返回Ajax調用真的很煩......

+0

請參閱這裏瞭解一篇偉大的文章:http://haacked.com/archive/2011/10/04/prevent-forms -authentication登錄頁面重定向消息時,你-donrsquot-want.aspx / – user910531