Je crée un site Web multiclient qui héberge des pages pour les clients. Le premier segment de l'URL sera une chaîne qui identifie le client, défini dans Global.asax en utilisant le schéma de routage URL suivante:Comment rediriger vers une URL de connexion dynamique dans ASP.NET MVC
"{client}/{controller}/{action}/{id}"
Cela fonctionne très bien, avec des URL telles que/foo/Accueil/Index. Cependant, lorsque j'utilise l'attribut [Autoriser], 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 Fixed/Account/Login définie dans web.config. MVC utilise un HttpUnauthorizedResult pour retourner un statut non autorisé 401, ce qui, je présume, amène ASP.NET à rediriger vers la page définie dans web.config
Alors, est-ce que quelqu'un sait comment contourner 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 des fouilles dans la source .Net, j'ai décidé qu'un attribut d'authentification personnalisé 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 }
});
}
}
}
faire presque exactement la même chose avec le routage, donc je besoin de ce! Merci! –
Merci, j'essayais de comprendre comment faire quelque chose de similaire. – Chance
cela m'a donné une idée pour la mise en œuvre propre, merci beaucoup! –