Comment câbler code commun d'un contrôleur de base dans ASP.NET MVC

voix
7

Mon application ASP.NET MVC est une petite partie d'une plus grande application ColdFusion qui va bientôt être complètement remplacé. Je passe quelques paramètres de partie ColdFusion via les cookies et la nécessité de vérifier ces informations avant que je lance chaque action. Dans le cas où l'information est manquante, je dois rediriger vers le site parent. Quel est le meilleur endroit pour mettre cette fonctionnalité et comment appeler uniformément?

À l'heure actuelle, je l'ai mis en place un contrôleur de base et dans toutes les méthodes d'action que j'appeler une méthode du contrôleur de base et en fonction du retour de résultat soit rediriger ou poursuivre l'action. Cette approche semble fonctionner, mais il Clutter mes méthodes d'action avec consern ne sont pas directement liés à l'action. Comment pourrais-je séparer dehors, sont-il des événements du cycle de vie pour le contrôleur que je pourrais puiser dans?

Créé 26/08/2009 à 23:32
source utilisateur
Dans d'autres langues...                            


3 réponses

voix
2

Si cela est nécessaire à chaque action dans un contrôleur particulier, une option potentielle que vous pourriez probablement utiliser est de faire exactement ce dans le contrôleur de base ...

public class MyBaseController: Controller
{
    protected override void Initialize(RequestContext requestContext)
    {
        base.Initialize(requestContext);

        var cookie = base.Request.Cookies["coldfusioncookie"];
        //if something is wrong with cookie
            Response.Redirect("http://mycoldfusionapp");
    }
}
Créé 26/08/2009 à 23:43
source utilisateur

voix
2

La meilleure approche serait de mettre en œuvre une coutume ActionFilterAttribute et passer outre la OnActionExecuting méthode pour gérer la logique, puis décorer vos actions avec l'attribut.

public class CheckCookieAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        // Check your cookie and handle the redirect here, otherwise, do nothing
        // You can get to your cookie through the filterContext parameter
    }
}

public class ActionController : Controller
{
    [CheckCookie]
    public ActionResult GetFoo()
    {
        return View();
    }
}

J'espère que cela t'aides.

Créé 27/08/2009 à 00:01
source utilisateur

voix
6

Si vous avez déjà mis en place un contrôleur de base juste passer outre sa OnActionExecuting()méthode:

public class YourBaseController : Controller
{
    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        base.OnActionExecuting(filterContext);

        if(somethingIsWrong)
        {
            filterContext.Result = new RedirectToRouteResult(
                new System.Web.Routing.RouteValueDictionary { ... });
        }
    }
}
Créé 27/08/2009 à 05:54
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more