2009-06-02 6 views
3

Je voudrais faire ce qui suit (code pseudo):Utiliser l'attribut pour créer Demande contrainte IP

[InternalOnly] 
public ActionResult InternalMethod() 
{ //magic } 

L'attribut « InternalOnly » est pour les méthodes qui doivent vérifier la pour une valeur connue IP de demande HttpContext avant de faire rien d'autre.

Comment créer cet attribut "InternalOnly"?

+0

Un poste similaire a été répondu ici http://stackoverflow.com/questions/473687/restrict-access-to-a-specific-controller-by -ip-address-dans-asp-net-mvc-beta – David

Répondre

6

Vous pouvez créer un attribut de filtre personnalisé:

public class InternalOnly : FilterAttribute 
{ 
    public void OnAuthorization (AuthorizationContext filterContext) 
    { 
     if (!IsIntranet (filterContext.HttpContext.Request.UserHostAddress)) 
     { 
      throw new HttpException ((int)HttpStatusCode.Forbidden, "Access forbidden."); 
     } 
    } 

    private bool IsIntranet (string userIP) 
    { 
     // match an internal IP (ex: 127.0.0.1) 
     return !string.IsNullOrEmpty (userIP) && Regex.IsMatch (userIP, "^127"); 
    } 
} 
+0

Je n'arrive pas à faire marcher ça ... J'ai écrit mon code exactement comme vous l'avez fait, mais l'attribut ne se déclenche pas/n'a aucun effet ... . Une idée? – Alex

+0

J'ai obtenu ceci pour travailler avec un ActionFilterAttribute. – Alex

1

Ceci est un exemple d'un problème qui peut être résolu avec une solution AOP (Aspect-Oriented Programming). Pour ce genre de chose, je recommande habituellement PostSharp.

Fondamentalement ce que PostSharp vous permet de faire est de créer des attributs que vous pouvez utiliser comme des marqueurs pour les endroits dans votre code que vous souhaitez insérer le code standard.

Questions connexes