4
如何在ASP.NET MVC中重定向到动态登录URL
我正在创建一个多租户网站,为客户托管页面。URL的第一段将是标识客户端的字符串,该字符串使用以下URL路由方案在Global.asax中定义: "{client}/{controller}/{action}/{id}" 使用/ foo / Home / Index之类的URL可以正常工作。 但是,当使用[Authorize]属性时,我想重定向到也使用相同映射方案的登录页面。因此,如果客户端是foo,则登录页面将是/ foo / Account / Login,而不是web.config中定义的固定的/ Account / Login重定向。 MVC使用HttpUnauthorizedResult返回401未经授权状态,我认为这会使ASP.NET重定向到web.config中定义的页面。 那么,有谁知道如何重写ASP.NET登录重定向行为?还是通过创建自定义授权属性在MVC中进行重定向会更好? 编辑-答案:在深入研究.Net源代码之后,我认为自定义身份验证属性是最佳解决方案: public class ClientAuthorizeAttribute: AuthorizeAttribute { public override void OnAuthorization( AuthorizationContext filterContext ) { base.OnAuthorization( filterContext ); if (filterContext.Cancel && filterContext.Result is HttpUnauthorizedResult ) { filterContext.Result = new RedirectToRouteResult( new RouteValueDictionary …