【问题标题】:IAuthorizationFilter deletes cookiesIAuthorizationFilter 删除 cookie
【发布时间】:2018-11-05 07:37:20
【问题描述】:

我有一个 MVC 项目,用户可以通过菜单更改语言。 控制器代码:

[HttpGet]
public ActionResult ChangeLanguage(string Language)
{
    Response.Cookies[SessionParams.LANGUAGE].Value = Language;
    Response.Cookies[SessionParams.LANGUAGE].Expires = DateTime.Now.AddDays(7);

    return Redirect(Request.UrlReferrer.PathAndQuery);
}

和 Global.asax.cs 代码:

protected void Application_BeginRequest(Object sender, EventArgs e)
{
    if (Request.Cookies[SessionParams.LANGUAGE] != null)
    {
         Thread.CurrentThread.CurrentUICulture = new CultureInfo(Request.Cookies[SessionParams.LANGUAGE].Value);
    }
}

这很好用。现在我添加了一个实现 IAuthorizationFilter 的类,以确保我可以在每次请求之前检查会话是否仍然有效(FilterConfig.cs):

public class ConnectedUserValidAuthorizationFilter : IAuthorizationFilter
{
    public void OnAuthorization(AuthorizationContext filterContext)
    {
        UrlHelper urlHelper = new UrlHelper(filterContext.HttpContext.Request.RequestContext);
        string loginUrl = urlHelper.Action("Login", "Account");
        if (filterContext.HttpContext.Request.Url.AbsolutePath != loginUrl)
        {
            if (filterContext.HttpContext.Session[SessionParams.CONNECTED_USER] == null)
                filterContext.HttpContext.Response.Redirect("~");
        }
    }
}

由于某种原因,在我将过滤器添加到全局过滤器之后:

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

调试显示 Global.asax.cs 中的 Request.Cookies 不再具有 language cookie 的值。

删除过滤器会恢复值。

知道如何解决吗?我尝试将过滤器代码移至Application_BeginRequest,但该上下文中尚不存在会话。

【问题讨论】:

    标签: c# model-view-controller iauthorizationfilter


    【解决方案1】:

    我最终实现了IActionFilter 而不是IAuthorizationFilter 接口,其逻辑与OnAuthorization 中使用的逻辑相同,在OnActionExecuting 函数内部。

    这似乎更适合该任务,因为在每个 Action 请求之前都会调用 OnActionExecuting。它似乎也保持 cookie 完好无损。

    【讨论】:

      猜你喜欢
      • 2010-10-15
      • 1970-01-01
      • 2023-03-18
      • 2011-11-25
      • 2017-11-08
      • 2010-12-18
      • 2018-01-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多