asp.net mvcアプリケーションでHandleUnauthorizedRequest
メソッドをオーバーライドして、ログインページにリダイレクトするのではなく、不正なajax呼び出しに401応答を送信するようにしました。これはローカルで実行するときちんとうまく動作しますが、IISにデプロイするとオーバーライドされたメソッドは呼び出されません。デバッグポイントは私のメソッドに全く当たらず、すぐにログインページにリダイレクトされます。IISにデプロイした後、カスタム権限属性が機能しない
これは私のコードです:
public class AjaxAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.HttpContext.Response.Clear();
filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.Unauthorized;
filterContext.Result = new JsonResult
{
Data = new
{
success = false,
resultMessage = "Errors"
},
JsonRequestBehavior = JsonRequestBehavior.AllowGet
};
filterContext.HttpContext.Response.End();
base.HandleUnauthorizedRequest(filterContext);
}
else
{
var url = HttpContext.Current.Request.Url.AbsoluteUri;
url = HttpUtility.UrlEncode(url);
filterContext.Result = new RedirectResult(ConfigurationManager.AppSettings["LoginUrl"] + "?ReturnUrl=" + url);
}
}
}
と私は私のコントローラの上に属性[AjaxAuthorize]
を宣言しました。一度IISに展開されると、何が違うのでしょうか?
更新:はここでも、それはAjaxのリクエストやログインセッションの有効期限が切れた後に簡単なページの更新だかどうかは関係ありません、私は、それは非常に簡単なテストだよ方法です -
- 私が展開私のローカルIISにサイト
- ホームページに移動 - "/ Home"
- "ログアウト"リンクを右クリックし、 "新しいタブで開く" - これにより、ホームページ現在のタブでまだ開いていますが、 セッションがログに記録されていますt。
- ホームページを更新します。ここで、デバッグポイントは私のオーバーライドされた
HandleUnauthorizedRequest
メソッドをヒットし、 if/else条件を通過して、ログインページにリダイレクトします。しかし、 はありません!単にログインページにリダイレクトするだけです。私は だと思っています。私のカスタム権限属性を考慮していないと思っています。
私はビジュアルスタジオからサイトを実行すると、すべて正常に動作し、コントロールは、オーバーライドされたメソッドでデバッグポイントを入力し、if/else条件を通過します。
'IISにデプロイされたら何が違うのですか? - ConfigurationManager.AppSettings [" LoginUrl "]' - 設定ファイルをチェックしましたか? – NightOwl888
はい、私はそれが「アカウント/ログイン」を指していることを確認しました。しかし、問題はIISに配備した後も、 "LoginUrl"の設定を完全に削除しても、コントロールが自分のカスタム属性の 'HandleUnauthorizedRequest'メソッドに入っていなくても、" Account/Login "にリダイレクトされます。私は展開した後でしかない。私は、デバッグとリリースの両方の設定でデプロイを試みましたが、同じ問題 –