如何为我的asp.net MVC网站的每个访问者添加一个cookie?

Eri*_*aal 4 c# asp.net-mvc asp.net-mvc-3

我正在尝试使用razor作为视图引擎的ASP.NET MVC 3站点.我需要为我网站的每个访问者分配一个cookie.这样做的最佳地点/方式是什么?请详细说明,因为我是ASP.NET的新手.

Evg*_*vin 10

有三种方法可以在不破坏mvc模式的情况下实现它:

1 - 在OnActionExecuting/ OnActionExecuted/ OnResultExecuting方法中具有指定行为的基本控制器类(如果整个网站需要此行为)

2 - 在OnActionExecuting/ OnActionExecuted/ OnResultExecuting方法中创建具有指定行为的动作过滤器:

public class MyCookieSettingFilterAttribute : ActionFilterAttribute 
{
    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        filterContext.HttpContext.Response.Cookies.Add(new HttpCookie(name, value));
    }
}
Run Code Online (Sandbox Code Playgroud)

例如,将过滤器属性分配给某些控制器/操作(如果所有网站都不需要此行为)

[MyCookieSettingFilter]
public class MyHomeController : Controller
{
}
Run Code Online (Sandbox Code Playgroud)

要么

public class MyAccountController : Controller
{
    [MyCookieSettingFilter]
    public ActionResult Login()
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

3 - 在OnActionExecuting/ OnActionExecuted/ OnResultExecuting方法中创建具有指定行为的操作过滤器并将其注册到global.asax- 它将适用于所有控制器的所有操作(如果所有网站都需要此行为)

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
   filters.Add(new MyCookieSettingFilterAttribute());
}
Run Code Online (Sandbox Code Playgroud)

我不建议使用Base Controller方式,因为它比Global Filter方式的可扩展性差.使用不同的全局过滤器提供不同的独立全局行为.