2009-06-16 3 views
1

Für Asp.net Mvc Projekt, ich muss umleiten jede Anfrage auf Konfigurationsseite, wenn Benutzer (sollte Admin dieser Website sein) besuchen Sie diese Website zum ersten Mal. Dieser Vorgang funktioniert wie die Standard-Login-Seite (jede Anfrage wird auf die Standard-Login-Seite umgeleitet, wenn der Zugriff verweigert wurde).Wie konfiguriere ich Asp.net Mvc, um jede Anfrage auf die Konfigurationsseite umzuleiten?

Nachdem der Benutzer die Konfigurationsdatei konfiguriert hat, wird die Routentabelle den normalen Controllern zugeordnet.

Ps. Diese Seite soll dem Administrator helfen, die Fehlerkonfiguration zu erkennen und einfach zu implementieren.

Update # 1 Ich versuche ASP.NET MVC WebFormRouting Demo auf Codeplex zu verwenden. Aber ich kann nicht umleiten, wenn Benutzer eine vorhandene Seite wie "~/AccessDenied.aspx" oder "~/web.config" besuchen.

routes.MapWebFormRoute("RedirectToConfig", "{*anything}", "~/App_Config"); 

Danke,

Antwort

0

Jetzt kann ich Technik von my another question anwenden, um dieses Problem zu lösen. Behalten Sie einen Wert in der statischen Instanz, wenn die Anwendung gestartet wird. Bitte sehen Sie sich den folgenden Code an.

teilweise ConfigBootstapper. cs

public class ConfigBootstapper 
{ 
    public static EnableRedirectToConfigManager = false; 
} 

Teil ConfigModule.cs

void HttpApplication_BeginRequest(object sender, EventArgs e) 
{ 
    HttpApplication app = sender as HttpApplication; 

    if (ConfigBootstapper.EnableRedirectToConfigManager) 
    { 
     app.Response.Redirect("~/App_Config"); 
    } 
} 

Teil Global.asax

protected void Application_Start() 
{ 
    [logic for setting ConfigBootstapper.EnableRedirectToConfigManager value] 
} 

PS. Vergessen Sie nicht, eine Bedingung zu überprüfen, die eine Endlosschleife vor der Umleitung verursacht.

1

2 Ideen:

  • Verwenden Sie eine catch-all Regel auf Ihrer Routing-Tabelle und stellt eine Einschränkung auf, dass es für den Config-Status überprüft
  • Setzen Sie den Code für diese Prüfung in Application_BeginRequest in GlobalAsax

zum catch-all Idee:

  • eine Regel mit URL erstellen „{* path}“ und es zuerst in Ihrer Liste
  • eine Einschränkung dieser Regel erstellen setzen nur zu aktivieren, falls die Konfiguration noch nicht fertig
  • Erstellen Sie eine einfache Steuerung z ConfigController mit einer einzigen Aktion, die nichts tut, sondern ein RedirectToUrl("config.aspx")

Aber die Lösung in Application_BeginRequest wäre einfacher, da der gesamte Code diese

+0

Also, ich muss benutzerdefinierte RouteBase-Klasse für alle fangen Regel mithilfe der RouteTable-Klasse erstellen. –

+0

Ich denke, eine benutzerdefinierte Einschränkung ist genug – chris166

+0

Aber ich habe keinen Controller für Handler diese Anfrage. Ich benutze nur einzelne aspx-Datei. Wie route ich eine Anfrage an eine aspx-Datei wie '~/App_Config/Default.aspx' oder '~/App_Config'? –

2

Aus Ihrer Beschreibung an einem Ort zu behandeln, scheint dies eine Genehmigung zu sein Bedenken, also würde ich eine benutzerdefinierte Autorize-Attributklasse empfehlen (von AuthorizeAttribute erben).

Von hier aus können Sie die OnAuthorization-Methode überschreiben, in der Sie überprüfen können, ob der Benutzer die erforderlichen Konfigurationsschritte ausgeführt hat, und filterContext.Result entsprechend festlegen. Eine grundlegende Implementierung würde wie folgt aussehen (dies voraus, dass Sie eine gültige/Konto/Configure Route haben):

public class CustomAuthorizeAttribute : AuthorizeAttribute 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     base.OnAuthorization(filterContext); 

     var user = ; // get your user object 

     if(user.IsConfigured == false) // example 
     { 
      filterContext.Result = new RedirectToRouteResult(
       new RouteValueDictionary 
        { 
         { 
          "ConfigureUserRoute", 
          filterContext.RouteData.Values["ConfigureUserRoute"] 
         }, 
         {"controller", "Account"}, 
         {"action", "Configure"} 
        }); 
      return; 
     } 
    } 
} 

Sie weitere Beispiele finden, wie eine benutzerdefinierte AuthorizeAttribute Klasse hier auf Stackoverflow zu erzeugen.

+0

Nein. Ich muss jede Anfrage mit Ausnahme von "~/App_Config/{filename}" nach "~/App_Config" umleiten, wenn der Benutzer (der Administrator dieser Website sein sollte) diese Website zum ersten Mal besucht. Also, es betrifft keine Genehmigung. –

Verwandte Themen