我有一个带有自定义成员资格提供程序的 ASP.NET MVC3 应用程序。
我在 web.config 中指定了一个 loginUrl,如下所示:
<forms loginUrl="~/SSO/LogOn" timeout="86400" slidingExpiration="true"/>
我想知道当用户点击他们没有访问权限的页面时如何拦截这个请求,以便我可以在这个 URL 上附加一些东西。
我有一个带有自定义成员资格提供程序的 ASP.NET MVC3 应用程序。
我在 web.config 中指定了一个 loginUrl,如下所示:
<forms loginUrl="~/SSO/LogOn" timeout="86400" slidingExpiration="true"/>
我想知道当用户点击他们没有访问权限的页面时如何拦截这个请求,以便我可以在这个 URL 上附加一些东西。
假设您有一个名为 SSO 的控制器和一个名为 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);
}
}
只需使用此属性注释需要授权的控制器/操作方法,它应该重定向到如下所示的 url:
/SSO/LogOn?appendedQueryStringParameter=somevalue