5

Unauthorized() を返すと、WebApi2 コントローラーがログイン ページにリダイレクトするのはなぜですか? [Authorize] 属性を使用すると、同じことが起こります。コントローラーは、 Content-Type で要求された Json または XML の結果を返すべきではありませんか? ログイン ページにリダイレクトすることはリソースの浪費であり、アプリケーション クライアントにとってはまったく役に立ちません。

Web を見回したところ、フォーム認証モジュールが 401 応答を取得して 302 に変換しているようです。認証モードが「なし」(フォームではない) であるため、これは奇妙です。さらに、この「機能」が.Net 4.5(私が実行している)で修正されたことを読みました。

Global.asax.cs で Application_EndRequest をオーバーライドしようとしました

        protected void Application_EndRequest()
    {
        var context = new HttpContextWrapper(Context);
        // If we're an ajax request, and doing a 302, then we actually need to do a 401
        if (Context.Response.StatusCode == 302 && context.Request.ContentType.StartsWith("application"))
        {
            Context.Response.Clear();
            Context.Response.ClearContent();
            Context.Response.StatusCode = 401;
            context.Response.RedirectLocation = null;
            Context.Response.End();
        }
    }

うまく機能しませんでした (IIS Html ページが返されました)。次のステップは何ですか ?

4

1 に答える 1