Как перенаправить на динамический URL-адрес входа в ASP.NET MVC
Я создаю многопользовательский веб-сайт, на котором размещаются страницы для клиентов. Первый сегмент URL будет строкой, идентифицирующей клиента, определенной в Global.asax с использованием следующей схемы маршрутизации URL:
"{client}/{controller}/{action}/{id}"
Это прекрасно работает с URL-адресами, такими как / foo / Home / Index.
Однако при использовании атрибута [Authorize] я хочу перенаправить на страницу входа, которая также использует ту же схему сопоставления. Поэтому, если клиент - foo, страница входа будет выглядеть так: / foo / Account / Login вместо фиксированного перенаправления / Account / Login, определенного в web.config.
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
{
{ "client", filterContext.RouteData.Values[ "client" ] },
{ "controller", "Account" },
{ "action", "Login" },
{ "ReturnUrl", filterContext.HttpContext.Request.RawUrl }
});
}
}
}