如果用户不在角色中,则拦截请求

时间:2012-06-26 15:03:01

标签: asp.net asp.net-mvc-3

我有一个带有自定义成员资格提供程序的ASP.NET MVC3应用程序。

我在web.config中指定了loginUrl,如下所示:

<forms loginUrl="~/SSO/LogOn" timeout="86400" slidingExpiration="true"/>

我想知道当用户点击他们没有访问权限的页面时我如何拦截此请求,以便我可以向此URL添加内容。

1 个答案:

答案 0 :(得分:1)

假设您有一个名为SSO的Controller和一个名为LogOn的动作方法,我认为您只需要扩展AuthorizeAttribute:

public class AppendingAuthorizeAttribute : AuthorizeAttribute
{        
    protected override void HandleUnauthorizedRequest(AuthorizationContext context)
    {
        var url = new UrlHelper(context.RequestContext);
        var logonUrl = url.Action("LogOn", "SSO", new {appendedQueryStringParameter = "somevalue"});
        filterContext.Result = new RedirectResult(logonUrl);
    }
}

只需注释需要使用此属性进行授权的控制器/操作方法,它应该重定向到一个类似于以下内容的网址:

  

/ SSO / LogOn支持?appendedQueryStringParameter = someValue中