2014-09-12 1 views
2

J'utilise le filtre d'actine dans ASP.NET MVC, maintenant s'il y a seulement 1 méthode d'action alors je n'ai pas de problème mais quand il y a 2 méthode avec le même nom juste le protocole est différent comme http obtenir et post puis comment puis-je utiliser le filtre?comment utiliser le filtre d'action quand j'ai 2 méthode avec le même nom avec le protocole différent

S'il vous plaît avis!

méthode d'action: -

[httpget] 
public actionresult home() 
{ 
return view(); 
} 

[httppost] 
public actionresult home() 
{ 
return null; 
} 

Code du filtre d'action:

public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor) 
     { 
      if (actionDescriptor.ControllerDescriptor.ControllerType == typeof(HomeController) && 
         (actionDescriptor.ActionName.Equals("home"))) 
      { 
       return new Filter[] 
        { 
         new Filter(this._actionFilter, FilterScope.Action, null) 
        }; 
      } 

      return new Filter[] { }; 

     } 

public void OnActionExecuted(ActionExecutedContext filterContext) 
     { 
      try 
      { 
       filterContext.Result = new RedirectToRouteResult(
       new RouteValueDictionary {{ "Controller", "xyz" }, 
             { "Action", "abc" } }); 

      } 
      catch (Exception ex) 
      { 

      } 
     } 

Voir quand je lance ce code j'ai trouvé à chaque fois que ce code exécuté sur HttpGet mais je veux courir filtre HttpPost méthode.

Répondre

2

Essayez avec dans votre méthode GetFilter:

if (actionDescriptor.ControllerDescriptor.ControllerType == typeof(HomeController) && 
        (actionDescriptor.ActionName.Equals("home")) && controllerContext.HttpContext.Request.HttpMethod == "POST") 
+0

homme Thankxx, il est des œuvres bien ... –

2

Vous pouvez vérifier si elle a HttpPost attribut ou non, signifie HttPost est appelé par le client ou HttpoGet:

public void OnActionExecuted(ActionExecutedContext filterContext) 
{ 
    try 
    { 
    var actionName = filterContext.ActionDescriptor.ActionName; 
    var actionParams = filterContext.ActionDescriptor.GetParameters 
    var actionParamsTypes = actionParams.Cast<ParameterDescriptor>() 
             .Select(x => x.ParameterType).ToArray(); 
    var controllerType = filterContext.Controller.GetType();    
    var actionMethodInfo = controllerType.GetMethod(actionName, 
               actionParamsTypes, 
               null);    
    var IsHttpPost = actionMethodInfo.IsDefiend(typeof(HttpPostAttribute),false); 

    if(IsHttpPost) // checking if it is HttpPost 
    { 
     // do something 
    } 
    } 
    catch (Exception ex) 
    { 

    } 

} 
Questions connexes