使用查询字符串在 MVC C# 上使用操作筛选器

本文关键字:操作 筛选 MVC 查询 字符串 | 更新日期: 2023-09-27 18:34:14

我使用类名 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);
    }

所以在方法中,我应用这个有头作为..

[RightChecker (isAdmin=true)]

我像这样执行此方法。

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

问题是我传递的是真的还是假的...我得到的结果变量为假...我得到:

异常[空对象引用]...

使用查询字符串在 MVC C# 上使用操作筛选器

您似乎没有在查询字符串中传递isAdmin=falseisAdmin=true。它对我有用。但是,您需要处理未传递查询字符串参数的情况。检查我的实施。如问题的注释部分所述,它的安全性不足以通过查询字符串传递它。

        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();
    }
查询

字符串的检查权限并不是很安全。你可以试试这个: [链接] "安全感知"操作链接?

但是由于 MVC 3 API 的变化,一些代码在 ActionIsAuthorized Method 中过时了,你可以自己修复它,请参阅我在这里提出的问题 [链接] https://stackoverflow.com/questions/10545018/how-to-get-authorizationfilters-from-filterproviders

似乎context.Request.QueryString["isAdmin"].ToString()导致了NullReferenceException.

尝试

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

在如下所示的视图数据中传递此内容:

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