Подтвердить что ты не робот

Использование Action Filters на MVC С# с использованием запроса String

Im, используя имя класса RightCheckerAttribute, чтобы проверить разрешение пользователя в приложении MVC3... Таким образом, класс RightCheckerAttribute выглядит следующим образом:

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

Итак, в методе i, применяющем это, есть голова как..

[RightChecker (isAdmin=true)]

Im Выполнение этого метода как это.

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

Проблема в том, передаю ли я true или false... Я получил переменную result как false... И я получаю:

Исключение [Нулевые ссылки на объекты]...

4b9b3361

Ответ 1

Кажется, вы не передаете isAdmin=false или isAdmin=true в строке запроса. Меня устраивает. Однако вам потребуется обработать ситуацию, когда вы не передаете параметр querystring. Проверьте мою реализацию. Как упоминалось в разделе комментариев вопроса, он недостаточно защищен, чтобы передать это через строку запроса.

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

Ваш метод действий

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

Ответ 2

Проверить права на querystring не очень безопасно. вы можете попробовать следующее:  [link] "Безопасность и" ссылка на действие?

но из-за изменений mvc 3 api некоторый код устарел в ActionIsAuthorized Method, вы можете исправить его самостоятельно, см. мой вопрос, заданный здесь [link] https://stackoverflow.com/questions/10545018/how-to-get-authorizationfilters-from-filterproviders

Ответ 3

Похоже, что context.Request.QueryString["isAdmin"].ToString() вызывает NullReferenceException.

Try

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

Ответ 4

Передайте это в свои ViewData, показанные ниже:

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