2012-05-15 4 views
13

Im Klassennamen RightCheckerAttribute mit Benutzerberechtigung in MVC3 Anwendung ... So ist die RightCheckerAttribute Klasse ist wie folgt zu überprüfen ...Verwendung von Action-Filter auf MVC C# Abfrage String

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); 
    } 

So in Methode i Anwendung haben dieser Kopf als ..

[RightChecker (isAdmin=true)]

Im Ausführung dieser Methode, da dies ..

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

Das Problem ist, ob ich richtig oder falsch bin vorbei ... habe ich als falsch Variable zur Folge hat ... Und ich bin immer:

Ausnahme [Null-Objekt Referenzen] ...

+0

Welche Zeile gibt Ihnen die Ausnahme? – gideon

+0

Boolergebnis = Convert.ToBoolean (context.Request.QueryString ["isAdmin"]. ToString()); Zeile gibt eine Ausnahme –

+2

Überprüfen der Abfragezeichenfolge, um festzustellen, ob ein Benutzer ein Administrator ist, ist nicht sicher. Möglicherweise möchten Sie das in der Sitzungs-Inead speichern. –

Antwort

15

Es scheint, dass Sie nicht die isAdmin=false oder isAdmin=true in Ihrer Query-String sind vorbei. Für mich geht das. Sie müssen jedoch die Situation behandeln, in der Sie den Querystring-Parameter nicht übergeben. Überprüfen Sie meine Implementierung. Wie im Abschnitt Kommentare der Frage erwähnt, ist es nicht ausreichend gesichert, um eine Abfragezeichenfolge zu übergeben.

 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 
       } 
      } 
     } 

Ihre Aktion-Methode

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

Danke für die Antwort .. tt funktioniert ...: D –

+0

Sie sind herzlich willkommen; froh, dass ich helfen konnte. –

0

Scheint wie die context.Request.QueryString["isAdmin"].ToString() verursacht möglicherweise eine NullReferenceException.

Versuchen

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

Der Autor sagt, dass er den Parameter übergibt, aber immer noch den Fehler erhält. http: // localhost: 5576/Singer/DeleteSinger? isAdmin = true –

+0

@Asif Der Kommentar des Autors zeigt an, dass 'NullReferenceException' ausgelöst wird, wenn' ToString() 'aufgerufen wird. Ich vermute also, dass aus irgendeinem Grund der Abfrageparameter nicht weitergegeben wird. Es sollte sowieso eine Überprüfung für "null" geben, auf die ich glaube, dass meine Antwort passt. – Soliah

+0

Ich denke, das ist seine Frage, warum es null ist, wenn er den Param passiert. –

0

Pass Dies in Ihren ViewData unten gezeigt:

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