Je suis de la création d'un multi-tenancy site web qui héberge des pages pour les clients. Le premier segment de l'URL sera une chaîne de caractères qui identifie le client, défini dans le Mondial.asax à l'aide de l'URL suivante schéma de routage:
"{client}/{controller}/{action}/{id}"
Cela fonctionne bien, avec des Url de la forme /toto/Home/Index.
Cependant, lors de l'utilisation de l'attribut [Authorize], je veux rediriger vers une page de connexion qui utilise le même schéma de mise en correspondance. Ainsi, si le client est toto, la page de connexion /foo/Compte/Login à la place de l'fixe /Compte/Login redirect défini dans le web.config.
MVC utilise un HttpUnauthorizedResult de retour 401 non autorisé d'état, dont je présume que les causes ASP.NET pour rediriger vers la page définie dans le web.config.
Donc, personne ne sait non plus comment remplacer la ASP.NET login redirect comportement? Ou serait-il mieux de rediriger MVC par la création d'une coutume de l'autorisation de l'attribut?
EDIT Réponse: après quelques recherches dans le .Net de source, j'ai décidé qu'une authentification personnalisée attribut est 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 }
});
}
}
}