2010-10-14 3 views
0

J'ai une application ASP.NET MVC à plusieurs locataires qui utilise des sous-domaines pour déterminer le locataire actuel. Le fait que le domaine soit valide ou non est déterminé via une recherche de table de base de données.Vérification des conditions sur chaque demande de page

Où serait le meilleur endroit pour avoir une fonction qui vérifie si le domaine est dans la base de données? Si le sous-domaine n'est pas dans la base de données, il doit rediriger vers l'Index action dans le contrôleur Error.

Le fait de placer la vérification dans la méthode Application_BeginRequest dans le fichier Global.asax ne fonctionne pas car une redirection interminable se produit.

Répondre

1

Où serait le meilleur endroit pour une fonction qui vérifie si le domaine est dans la base de données Si le sous-domaine n'est pas dans la base de données, il doit rediriger vers l'action Index dans le contrôleur d'erreur.

La vérification de la méthode Application_BeginRequest dans le fichier Global.asax ne fonctionne pas car une redirection interminable se produit.

C'est le bon endroit, vous avez juste besoin de vérifier la demande Url n'est pas déjà/Erreur.

Vous le faites peut-être déjà, mais je voudrais ajouter qu'il semble que les informations statiques que vous devriez mettre en mémoire cache au lieu de cliquer sur la base de données pour chaque requête.

+0

Une chose qui gênait avec 'Application_BeginRequest' est que les liens CSS/JS/Image étaient en train de déclencher la fonction, donc je devais avoir une condition pour vérifier si ce fichier existe, si c'était le cas, la fonction retournerait. Mais je pense que c'est à cause de Cassani WebServer. – Omar

0

Vous pouvez sous-classer l'attribut actionFilter et remplacer la méthode onactionExecuting. dans cette méthode u peut effectuer des contrôles de base de données et de rediriger l'utilisateur correctement

public class CustomActionFilterAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     if(DatabaseLookup) 
     { 
      return; 
     } 
     filterContext.Result = new RedirectResult("http://servername/Error"); 

    } 

} 

maintenant u peut décorer ur méthodes d'action avec cette coutume ActionFilter attribut

[CustomActionFilter] 
public ActionResult mymethod() 
{ 
    //action method goes here 
} 
+0

J'ai besoin d'un filtre beaucoup plus tôt, avant que les contrôleurs ou les actions ne soient appelés. – Omar

Questions connexes