0

MembershipReboot を Breeze SPA アプリケーションと統合しました。ログインと認証は期待どおりに機能します。BreezeController.cs に、承認の失敗をキャプチャするために以下のコードを追加しました。

[AttributeUsageAttribute(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
    public class AuthorizeAttribute : System.Web.Http.Filters.AuthorizationFilterAttribute
    {

        public override void OnAuthorization(System.Web.Http.Controllers.HttpActionContext actionContext)
        {
            base.OnAuthorization(actionContext);

            ////check authentication and return if not authorized
            if (actionContext != null)
            {
                if (!actionContext.RequestContext.Principal.Identity.IsAuthenticated)
                {
                    actionContext.Response = actionContext.ControllerContext.Request.CreateResponse(System.Net.HttpStatusCode.Redirect);
                    System.Web.HttpContext.Current.Server.ClearError();
                    System.Web.HttpContext.Current.Response.Redirect("/UserAccount/Home",true);
                    //***********
                    //REDIRECT BEING CAUGHT BY ANGULAR ERROR HANDLER!!!
                    //**********
                    System.Web.HttpContext.Current.ApplicationInstance.CompleteRequest();


                }

            }
        }
    }

以下のコードが呼び出されると、承認の欠如がキャッチされます。

[System.Web.Http.HttpGet] [ValidateAntiForgeryToken] [Authorize] public string Metadata() { return _repository.Metadata; }

ただし、リダイレクト コードが Toast エラー ハンドラに読み込まれ、エラーとして表示され、リダイレクトが機能しません。

エラー画面に読み込まれるのではなく、コードを実行する方法はありますか?

4

2 に答える 2

0

失敗した promise を処理し、エラー オブジェクトを調べます。これが承認の失敗であることを示すステータス コードがそこにあるはずです。エラーを画面に報告するのではなく、アプリに応じてリダイレクトします。

この「インターセプター」を「DataService」/「DataContext」抽象化の中に入れて、すべての Breeze 呼び出しがそれを利用できるようにすると思います。それを使用して EntityManager を拡張することもできます。あまり考えたことがありません。

この「インターセプター」が機能するようになったら、私たち全員と共有したいと思うかもしれません。コミュニティは貢献が大好きです。:-)

于 2014-08-19T19:30:52.013 に答える