Je crée un site Web mutualisé qui héberge des pages pour les clients. Le premier segment de l'URL sera une chaîne qui identifie le client, définie dans Global.asax à l'aide du schéma de routage d'URL suivant:
"{client}/{controller}/{action}/{id}"Cela fonctionne bien, avec des URL telles que / foo / Home / Index.
Cependant, lorsque j'utilise l'attribut [Authorize], je souhaite rediriger vers une page de connexion qui utilise également le même schéma de mappage. Donc, si le client est foo, la page de connexion serait / foo / Account / Login au lieu de la redirection fixe / Account / Login définie dans web.config.
MVC utilise un HttpUnauthorizedResult pour renvoyer un statut 401 non autorisé, ce qui, je suppose, oblige ASP.NET à rediriger vers la page définie dans web.config.
Alors, est-ce que quelqu'un sait comment remplacer le comportement de redirection de connexion ASP.NET? Ou serait-il préférable de rediriger dans MVC en créant un attribut d'autorisation personnalisé?
EDIT - Réponse: après quelques fouilles dans la source .Net, j'ai décidé qu'un attribut d'authentification personnalisé était la meilleure solution:
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 }
                });
        }
    }
}