2016-05-31 28 views
0

asp.net MVC 5の使用... ActionResultを持つコントローラは、Jsonにajax呼び出しを提供しています。一定の条件の下では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を設定していることがわかり見ることができます元のURL。

私はこれを引き起こしているか、それを倒す方法を理解できません。マイクロソフトは時々私たちを助けようとする謎を本当に嫌っている。

注:Global.asax.csで...

  • のApplication_Errorは
  • Application_PreRequestHandlerExecuteが2倍と呼ばれている(上記のコール経由)と呼ばれることは決してありません。一度上記の私のコントローラメソッドの前に、一度私はエラーstatatusを設定した後、およびまた、家庭/インデックスコントローラは

呼び出される前に: (リダイレクト中)のApplication_AuthenticateRequestでのコールスタックは、いくつかの内部で始まります関数:System.Web.dll!System.Web.Hosting.PipelineRuntime.ProcessRequestNotification (あまり役に立ちません)

+0

を参照してください[なぜAuthorizeAttributeがログインにリダイレクトしません認証と承認の失敗のページ?](http://stackoverflow.com/a/5844884/181087) – NightOwl888

答えて

0

OK ... 401を使用するのは避けてください。 Forbidden(403)を使用すると、リダイレクトなしで目的の結果が得られます。 ASP.NET MVCは、自宅にすべての401年代をリダイレクト....あなたはAJAX呼び出しにJSONを返すようにしようとしているとき、本当に迷惑しているいくつかの理由

...

+0

偉大な記事はこちらをご覧ください:http://haacked.com/archive/2011/10/04/prevent-forms -authentication-login-page-redirect-when-donrsquot-want.aspx / – user910531

関連する問題