2009-07-30 14 views
1

私のコントローラメソッドで[Authorize(Roles = "Admin")]タグを使いたいです。Asp MVC [承認] Getの代わりに投稿を返す

ユーザーが管理者でない場合は、このユーザーをログイン画面に戻したいと考えています。 ユーザーをログインページに戻す際のデフォルトの動作では、Get URLを使用してユーザーを「アカウント/ログイン」にリルートします。

問題は、私のウェブサイトのサブページはすべて、ログイン画面を含むAjax呼び出しによって更新された部分的なビューです。

私の質問は です。リダイレクトの代わりにポストリダイレクトを返すように、下のクラスを変更することはできますか?

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"); 
    } 
    } 
} 

答えて

1

どうやら問題は、私のアカウントコントローラのログイン方法に

[Acceptverbs(HttpVerbs.Post)] 

属性を削除することで解決しseemes。

私たちもAuthorizeAttribute

:)

+2

したがって、AcceptVerbs属性を使用することができます。 [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)] – keithm

0
をオーバーライドする必要はありません。この方法で

私は唯一の指定する「loginUrl」という名前のをのAppSetting を追加する必要が

一つMicrosoft.WebPages.PreApplicationStartCode.SetupFormsAuthentication()で解決策を見つけましたログインアクション:

<add key="loginUrl" value="~/Account/LogOn"/> 
関連する問題