2012-05-15 2 views
13

Im en utilisant RightCheckerAttribute nom de classe pour vérifier l'autorisation de l'utilisateur dans l'application MVC3 ... Ainsi la classe RightCheckerAttribute est comme ça ...Utilisation de filtres d'action sur MVC C# en utilisant la requête chaîne

public bool isAdmin { get; set; } 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     HttpContextBase context = filterContext.HttpContext; 

     bool result = Convert.ToBoolean(context.Request.QueryString["isAdmin"].ToString()); 

     if (isAdmin != result) 
     { 
      RouteValueDictionary redirecttargetDictionary = new RouteValueDictionary(); 
      redirecttargetDictionary.Add("action", "NoPermission"); 
      redirecttargetDictionary.Add("controller","Singer"); 
      filterContext.Result = new RedirectToRouteResult(redirecttargetDictionary); 

     } 

     //base.OnActionExecuting(filterContext); 
    } 

donc dans la méthode i application cela a tête ..

[RightChecker (isAdmin=true)]

Im L'exécution de cette méthode comme cela ..

http://localhost:5576/Singer/DeleteSinger?isAdmin=true

Le problème est de savoir si je passe vrai ou faux ... Je suis arrivé résultat variable faux ... Et je reçois:

Exception [Null références de l'objet] ...

+0

Quelle ligne vous donne l'exception? – gideon

+0

bool result = Convert.ToBoolean (context.Request.QueryString ["isAdmin"]. ToString()); ligne donne une exception –

+2

Vérification de la chaîne de requête pour déterminer si un utilisateur est un administrateur n'est pas sécurisé. Vous pourriez vouloir stocker cela dans la session insead. –

Répondre

15

Il semble que vous n'êtes pas passer le isAdmin=false ou isAdmin=true dans votre chaîne de requête. Ça marche pour moi. Cependant, vous devrez gérer la situation où vous ne passez pas le paramètre querystring. Vérifiez ma mise en œuvre. Comme mentionné dans la section des commentaires de la question, il n'est pas suffisamment sécurisé pour passer cela à travers une chaîne de requête.

 public class RightChecker : ActionFilterAttribute 
     { 
      public bool IsAdmin;    

      public override void OnActionExecuting(ActionExecutingContext filterContext) 
      { 

       bool result = false; 
       if (filterContext.HttpContext.Request.QueryString["isAdmin"] != null) 
       { 
         bool.TryParse(filterContext.HttpContext.Request.QueryString["isAdmin"].ToString(), out result); 
       } 

       if (IsAdmin != result) 
       { 
        //your implementation 
       } 
      } 
     } 

Votre méthode d'action

[RightChecker(IsAdmin=true)] 
    public ActionResult AttCheck() 
    { 
     return View(); 
    } 
+0

Merci pour la réponse .. cela fonctionne ...: D –

+0

vous êtes les bienvenus; heureux d'avoir pu aider. –

0

Apparemment, le context.Request.QueryString["isAdmin"].ToString() provoque un NullReferenceException.

Essayez

var param = context.Request.QueryString["isAdmin"] as string ?? "false"; 
var result = param == "true"; 
+0

L'auteur dit qu'il passe le paramètre mais reçoit toujours l'erreur. http: // localhost: 5576/Singer/DeleteSinger? isAdmin = true –

+0

@Asif Le commentaire de l'auteur indique que 'NullReferenceException' est levé lorsque' ToString() 'est appelé. Donc, je devine que pour une raison quelconque, le paramètre de requête n'est pas transmis. Il devrait y avoir un chèque pour 'null' de toute façon dont ma réponse je crois prend soin. – Soliah

+0

Je pense que c'est sa question pourquoi son null s'il passe le param. –

0

passe ceci dans votre ViewData montré ci-dessous:

public ActionResult Test(bool testParam) 
{ 
    ViewData["isAdmin"] = testParam; 
    return View(); 
} 
Questions connexes