C# 在MVC上使用操作过滤器#使用查询字符串
我正在使用类名RightCheckerAttribute检查MVC3应用程序中的用户权限。。。 所以RightCheckerAttribute类是这样的C# 在MVC上使用操作过滤器#使用查询字符串,c#,asp.net-mvc,action-filter,actionfilterattribute,C#,Asp.net Mvc,Action Filter,Actionfilterattribute,我正在使用类名RightCheckerAttribute检查MVC3应用程序中的用户权限。。。 所以RightCheckerAttribute类是这样的 public bool isAdmin { get; set; } public override void OnActionExecuting(ActionExecutingContext filterContext) { HttpContextBase context = filterContext
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
问题是我传递的是真还是假。。。我得到的结果变量为false。。。我得到:
异常[空对象引用]
似乎是
context.Request.QueryString[“isAdmin”].ToString()
导致了NullReferenceException
试一试
您似乎没有在查询字符串中传递
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();
}
来自querystring的检查权限并不是真正安全的。 您可以尝试以下方法: [连结]
但是由于mvc 3 api的变化,一些代码在ActionIsAuthorized方法中被废弃,您可以自己修复,请参见我在此处提出的问题[link]在您的视图中传递此数据如下所示:
public ActionResult Test(bool testParam)
{
ViewData["isAdmin"] = testParam;
return View();
}
哪一行给出了异常?bool result=Convert.ToBoolean(context.Request.QueryString[“isAdmin”].ToString());第行给出一个异常检查查询字符串以确定用户是否是管理员不安全。您可能希望将其存储在insead会话中。作者说他正在传递参数,但仍然得到错误@Asif作者的评论表明,调用
ToString()
时会抛出NullReferenceException
。因此,我猜测由于某种原因,查询参数没有被传递。无论如何,应该检查null
,我相信这是我的答案。我想这是他的问题,如果他通过参数,为什么会为null。
public ActionResult Test(bool testParam)
{
ViewData["isAdmin"] = testParam;
return View();
}