2009-06-16 6 views
1

Pour le projet Asp.net Mvc, je dois rediriger chaque demande à la page de configuration lorsque l'utilisateur (devrait être administrateur de ce site) visiter ce site Web à la première fois. Cette opération comme la page de connexion par défaut (chaque demande sera redirigée vers la page de connexion par défaut si l'accès est refusé).Comment configurer Asp.net Mvc pour rediriger chaque requête vers la page de configuration?

Après configuration par l'utilisateur du fichier de configuration, la table de routage est mappée aux contrôleurs normaux.

Ps. Cette page devrait aider Admin à détecter la configuration des erreurs et à les déployer facilement.

Mise à jour # 1 J'essaie d'utiliser ASP.NET MVC WebFormRouting Demo sur CodePlex. Mais je ne peux pas rediriger lorsque l'utilisateur visite une page existante comme "~/AccessDenied.aspx" ou "~/web.config".

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

Merci,

Répondre

0

Maintenant, je peux appliquer la technique de my another question pour résoudre ce problème. En gardant une certaine valeur dans une instance statique lorsque l'application démarre. Veuillez regarder le code suivant.

partiel ConfigBootstapper.cs

public class ConfigBootstapper 
{ 
    public static EnableRedirectToConfigManager = false; 
} 

ConfigModule.cs partielles

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

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

Global.asax partielle

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

PS. N'oubliez pas de vérifier certaines conditions qui provoquent une boucle infinie avant la redirection.

1

2 idées:

  • Utilisez un fourre-tout règle sur le dessus de votre table de routage et de mettre une contrainte sur ce qui vérifie l'état de configuration
  • Mettez le code pour cette vérification dans Application_BeginRequest dans GlobalAsax

Détails pour le fourre-tout idée:

  • Créer une règle avec l'URL « {* path} » et le mettre d'abord dans votre liste
  • créer une contrainte pour activer cette règle uniquement dans le cas où la configuration est pas encore fait
  • Créer un contrôleur simple ConfigController avec une seule action qui ne fait rien, mais un RedirectToUrl("config.aspx")

Mais la solution Application_BeginRequest serait plus simple, puisque l'ensemble du code pour gérer ce en un seul endroit

+0

Donc, j'ai besoin de créer une classe RouteBase personnalisée pour attraper toutes les règles en utilisant la classe RouteTable. –

+0

Je pense qu'une contrainte personnalisée est suffisante – chris166

+0

Mais je n'ai aucun contrôleur pour gérer cette requête. Je n'utilise qu'un seul fichier aspx. Comment router une requête vers un fichier aspx comme '~/App_Config/Default.aspx' ou '~/App_Config'? –

2

D'après votre description, cela semble être une autorisation problème, je recommanderais une classe d'attribut Authorize personnalisée (inherit from AuthorizeAttribute). De là, vous pouvez remplacer la méthode OnAuthorization où vous pouvez vérifier si l'utilisateur a terminé les étapes de configuration requises et définir filterContext.Result en conséquence. Une mise en œuvre de base ressemblerait à quelque chose comme ceci (ceci suppose que valide/compte/Configurer la route):

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; 
     } 
    } 
} 

Vous pouvez trouver d'autres exemples de la façon de créer une classe personnalisée AuthorizeAttribute ici sur StackOverflow.

+0

Non. J'ai besoin de rediriger toutes les demandes sauf "~/App_Config/{nomfichier}" vers "~/App_Config" lorsque l'utilisateur (devrait être administrateur de ce site) visite ce site web pour la première fois. Donc, cela ne concerne pas l'autorisation. –

Questions connexes