使用查询字符串在 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
问题是我传递的是真的还是假的...我得到的结果变量为假...我得到:
异常[空对象引用]...
您似乎没有在查询字符串中传递isAdmin=false
或isAdmin=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();
}