Ich erstelle eine mandantenfähige Website, auf der Seiten für Kunden gehostet werden. Das erste Segment der URL ist eine Zeichenfolge, die den in Global.asax definierten Client anhand des folgenden URL-Routing-Schemas identifiziert:
"{client}/{controller}/{action}/{id}"
Dies funktioniert gut mit URLs wie / foo / Home / Index.
Wenn Sie jedoch das Attribut [Autorisieren] verwenden, möchte ich 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 Umleitung / Account / Login.
MVC verwendet ein HttpUnauthorizedResult, um einen nicht autorisierten 401-Status zurückzugeben, von dem ich annehme, dass ASP.NET zu der in web.config definierten Seite umleitet.
Weiß jemand, wie man das ASP.NET-Anmeldeumleitungsverhalten überschreibt? Oder ist es besser, in MVC umzuleiten, indem Sie ein benutzerdefiniertes Berechtigungsattribut erstellen?
BEARBEITEN - Antwort: Nachdem ich mich ein wenig mit der .Net-Quelle befasst hatte, entschied ich, dass ein benutzerdefiniertes Authentifizierungsattribut die beste Lösung ist:
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 }
});
}
}
}