Ich erstelle eine Multi-Tenancy-Website, die Seiten für Clients hostet. Das erste Segment der URL wird eine Zeichenfolge sein, die den Client identifiziert, definiert in Global.asax die folgende URL-Routing-Schema verwendet:Umleiten zu einer dynamischen Login-URL in ASP.NET MVC
"{client}/{controller}/{action}/{id}"
Dies funktioniert gut, mit URLs wie/foo/Home/Index.
Bei Verwendung des Attributs [Autorisieren] möchte ich jedoch zu einer Anmeldeseite umleiten, die ebenfalls dasselbe Zuordnungsschema verwendet. Wenn der Client also foo ist, lautet die Anmeldeseite/foo/Account/Login anstelle der in web.config definierten festen/Account/Login-Weiterleitung.
MVC verwendet ein HttpUnauthorizedResult, um einen nicht autorisierten 401-Status zurückzugeben, von dem ich vermute, dass ASP.NET zu der in web.config definierten Seite umgeleitet wird.
Wer weiß also, wie das ASP.NET-Login-Redirect-Verhalten überschrieben wird? Oder wäre es besser, in MVC umzuleiten, indem Sie ein benutzerdefiniertes Autorisierungsattribut erstellen?
EDIT - Antwort: nach ein paar in die Quelle .Net graben, habe ich beschlossen, dass eine benutzerdefinierte Authentifizierung Attribut ist die beste Lösung:
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 }
});
}
}
}
fast genau die gleiche Sache mit Routing zu tun, so brauchte ich das! Vielen Dank! –
Danke, ich habe versucht, herauszufinden, wie man etwas Ähnliches macht. – Chance
es gab mir eine Idee für die eigene Umsetzung, vielen Dank! –