2009-07-30 85 views
1

我想在我的控制器方法上使用[Authorize(Roles =「Admin」)]標籤。Asp MVC [Authorize]返回帖子而不是獲取

如果用戶不是管理員,我想將此用戶返回到我的登錄屏幕。 將用戶返回到我的登錄頁面的默認行爲是使用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

顯然,問題seemes通過我的賬戶控制器的登錄方法去除

[Acceptverbs(HttpVerbs.Post)] 

屬性解決。

這種方式,我們甚至不用重寫AuthorizeAttribute

:)

+2

您仍然可以使用AcceptVerbs屬性: [AcceptVerbs(HttpVerbs.Get | HttpVerbs.Post)] – keithm 2009-07-30 14:19:36

0

我發現了一個解決方案,Microsoft.WebPages.PreApplicationStartCode.SetupFormsAuthentication()

一個只需要添加一個appSetting名爲「loginUrl」指定登錄動作:

<add key="loginUrl" value="~/Account/LogOn"/>