Asp MVC [Authorize] GetではなくPostを返す
-
05-07-2019 - |
質問
コントローラーメソッドで[Authorize(Roles =" Admin")]タグを使用します。
ユーザーが管理者でない場合、このユーザーをログイン画面に戻したいです。 ユーザーをログインページに戻すデフォルトの動作は、ユーザーを" Account / Login"に再ルーティングすることです。 Get URLを使用します。
問題は、私のWebサイトのサブページはすべて、ログイン画面を含むAjax呼び出しによって更新される部分的なビューであるということです。
だから私の質問は: 以下のクラスを変更して、getリダイレクトの代わりにpostリダイレクトを返すことは可能ですか?
public class AjaxAuthorizeAttribute : AuthorizeAttribute
{
override public void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
// Only do something if we are about to give a HttpUnauthorizedResult and we are in AJAX mode.
if (filterContext.Result is HttpUnauthorizedResult && filterContext.HttpContext.Request.IsAjaxRequest())
{
filterContext.Result = new RedirectResult("../Account/Login");
}
}
}
解決
どうやら問題を解決するように見える
[Acceptverbs(HttpVerbs.Post)]
アカウントコントローラーのログインメソッドの属性。
この方法では、AuthorizeAttributeをオーバーライドする必要さえありません
:)
他のヒント
Microsoft.WebPages.PreApplicationStartCode.SetupFormsAuthentication()
で解決策を見つけました" loginUrl"という名前の appSetting を追加するだけです。ログインアクションを指定するには:
<add key="loginUrl" value="~/Account/LogOn"/>
所属していません StackOverflow