2012-05-15 9 views
13

Im usando nombre de la clase RightCheckerAttribute para comprobar el permiso del usuario en la aplicación MVC3 ... Así la clase RightCheckerAttribute es así ..., con la acción de filtros en MVC C# usando String query

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

Así que en el Método I aplicando esto tiene como cabeza ..

[RightChecker (isAdmin=true)]

Im la ejecución de este método ya que esto ..

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

El problema es si estoy pasando verdaderas o falsas ... Tengo resultar variable como falsa ... Y me estoy haciendo:

de excepción [referencias objeto nulo] ...

+0

¿Qué línea le da la excepción? – gideon

+0

bool result = Convert.ToBoolean (context.Request.QueryString ["isAdmin"]. ToString()); línea da una excepción –

+2

Verificar la cadena de consulta para determinar si un usuario es un administrador no es seguro. Es posible que desee almacenar eso en la sesión inseada. –

Respuesta

15

Parece que no está de paso o la isAdmin=falseisAdmin=true en su cadena de consulta. Esto funciona para mi. Sin embargo, tendrá que manejar la situación en la que no está pasando el parámetro querystring. Verifica mi implementación. Como se menciona en la sección de comentarios de la pregunta, no está lo suficientemente asegurado para pasar esto a través de una cadena de consulta.

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

su método de acción

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

Gracias por la respuesta .. tht works ...: D –

+0

; usted es bienvenido; me alegro de poder ayudar. –

0

Parece que tal vez el context.Request.QueryString["isAdmin"].ToString() está causando un NullReferenceException.

Trate

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

El autor dice que está pasando el parámetro pero aún así recibe el error. http: // localhost: 5576/Singer/DeleteSinger? isAdmin = true –

+0

@Asif El comentario del autor indica que se está lanzando 'NullReferenceException' cuando se llama a' ToString() '. Así que supongo que, por alguna razón, el parámetro de consulta no se está transfiriendo. Debería haber un cheque para 'null' de todos modos, de lo que creo que mi respuesta se ocupa. – Soliah

+0

Creo que esa es su pregunta de por qué es nulo si pasa el param. –

0

Pass esto en su ViewData se muestra a continuación:

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