我正在尝试开发一个自定义操作过滤器,它将检查 cookie 是否启用。如果 cookie 未启用,则将使用重定向到特定的错误页面。这是我的代码。
public class CheckCookieAttribute : FilterAttribute, IActionFilter
{
public string prmAction{get;set;}
public string prmController{get;set;}
public void OnActionExecuting(ActionExecutingContext filterContext)
{
if(filterContext.HttpContext.Request.Cookie["YourCookie"]==null)
{
filterContext.Result = controller.RedirectToAction(prmAction,prmController)
}
}
public void OnActionExecuted(ActionExecutedContext filterContext)
{
//The action filter logic - after
}
}
现在我正在使用类似
[CheckCookie(prmAction="MyAction",prmController="MyController")]
由于缺乏良好的知识,我无法开发属性驱动的 cookie 启用或禁用检查。
我想以这种方式开发代码,因此我不应该传递任何 Controller 名称或操作名称。我喜欢使用类似的代码
[HttpPost]
[CheckCookieAttribute]
public ActionResult Save(Person oPerson)
{
return View();
}
[CheckCookieAttribute]
public class HomeController : Controller
{
public ActionResult Index()
{return View();}
public ActionResult About()
{return View();}
}
}
我不会提供任何 Controller 名称或操作名称。只是指导我需要在代码中更改哪些内容。谢谢
最佳答案
看来您想要完成的任务已经内置到 ASP.NET MVC 中。
我会使用 [Authorize] 属性 ( http://msdn.microsoft.com/en-us/library/system.web.mvc.authorizeattribute(v=vs.108).aspx ) 来检查用户是否有 cookie。
如果您想在用户未授权时将用户重定向到特定的 Controller /操作,可以使用以下属性:
public class AuthorizeUserAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary(
new
{
controller = "Error",
action = "Unauthorized"
})
);
}
}
参见ASP.NET MVC 4 Custom Authorize Attribute with Permission Codes (without roles)
然后你可以使用它:
[HttpPost]
[AuthorizeUser]
public ActionResult Save(Person oPerson)
{
return View();
}
或者,如果您想要的正是您所要求的,可以这样做:
public class CheckCookieAttribute : ActionFilterAttribute, IActionFilter
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.HttpContext.Request.Cookies["YourCookie"] == null)
{
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { {"controller", "MyController"}, {"action", "MyAction"}});
}
else
{
base.OnActionExecuting(filterContext);
}
}
public void OnActionExecuted(ActionExecutedContext filterContext)
{
//The action filter logic - after
}
}
关于asp.net-mvc-3 - 如何开发特定的 Action 过滤 Controller 或 Action 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18981290/