gpt4 book ai didi

c# - 在 MVC、C# 中的每个请求中运行一个方法?

转载 作者:IT王子 更新时间:2023-10-29 03:51:40 25 4
gpt4 key购买 nike

在 WebForm 中,我们可以在 MasterPage.cs 中编写一个方法,它在每个请求中运行。
例如:

MasterPage.cs
--------------
protected void Page_Load(object sender, EventArgs e)
{
CheckCookie();
}

我们如何在 MVC 中做这样的事情?

最佳答案

在 ASP.NET MVC 中你可以写一个 custom global action filter .


更新:

根据评论部分的要求,这里有一个此类过滤器的示例:

public class MyActionFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
var fooCookie = filterContext.HttpContext.Request.Cookies["foo"];
// TODO: do something with the foo cookie
}
}

如果要根据cookie的值进行授权,实现IAuthorizationFilter会更正确接口(interface):

public class MyActionFilterAttribute : FilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
var fooCookie = filterContext.HttpContext.Request.Cookies["foo"];

if (fooCookie == null || fooCookie.Value != "foo bar")
{
filterContext.Result = new HttpUnauthorizedResult();
}
}
}

如果您希望此操作过滤器针对每个 Controller 操作的每个请求运行,您可以在 global.asax 中的 RegisterGlobalFilters 方法中将其注册为全局操作过滤器:

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
filters.Add(new HandleErrorAttribute());
filters.Add(new MyActionFilterAttribute());
}

如果你只需要为特定的 Action 或 Controller 执行这个,只需用这个属性装饰它们:

[MyActionFilter]
public ActionResult SomeAction()
{
...
}

关于c# - 在 MVC、C# 中的每个请求中运行一个方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9511462/

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