質問

コントローラーメソッドで[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"/>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top