Как перенаправить на динамический 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 }
                });
        }
    }
}

Ответы на вопрос(4)

Ваш ответ на вопрос