gpt4 book ai didi

asp.net-mvc-3 - 如何开发特定的 Action 过滤 Controller 或 Action 方法

转载 作者:行者123 更新时间:2023-12-04 04:40:28 24 4
gpt4 key购买 nike

我试图开发一个自定义操作过滤器,它将检查 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com