【问题标题】:how to set cookies in _layout如何在 _layout 中设置 cookie
【发布时间】:2021-05-19 07:48:20
【问题描述】:

当网站启动时,我有一个功能可以检查是否有用户 cookie-

        foreach (var cookie in HttpContextAccessor.HttpContext.Request.Cookies)
    {
        if (cookie.Key == "OrderLoginDetails")
        {

            Customer.Cookie = cookie.Value;
        }
    }

而且效果很好!

当我尝试制作新的 cookie 时,问题就开始了……

如何在布局文件中创建新的 cookie?

我试过这样-

 if (Customer.Cookie == null)
    {
        var newCust = Customer.newCustomer();
        var cookieOptions = new CookieOptions
        {
            Path = "/",
            HttpOnly = false,
            IsEssential = true, //<- there
            Expires = DateTime.Now.AddMonths(1),
        };
        Response.Cookies.Append("OrderLoginDetails", Customer.CustomerCode + Customer.CustomerMail, cookieOptions);


    }

但它不起作用。

最好的问候

【问题讨论】:

  • 你说的不起作用是什么意思?有什么错误吗?您是否尝试过调试代码以确保 Response.Cookies.Append 被执行?
  • 我收到 2 个错误 - 1. 当前上下文中不存在名称 'Response' 2. 找不到类型或命名空间名称 'CookieOptions'(您是否缺少 using 指令或程序集参考?)代码在布局页面中,这是问题所在......但我不知道另一种设置cookie的方法

标签: c# asp.net-mvc asp.net-core razor-pages


【解决方案1】:

如果代码位于布局或其他 Razor 视图文件中,您可以使用 Context 属性访问 HttpContext 例如

foreach (var cookie in Context.Request.Cookies)
{
    if (cookie.Key == "OrderLoginDetails")
    {
        Customer.Cookie = cookie.Value;
    }
}

和

Context.Response.Cookies.Append("OrderLoginDetails", Customer.CustomerCode + Customer.CustomerMail, cookieOptions);

尽管如果您想为每个页面请求执行此代码,您可能会考虑使用过滤器而不是将其嵌入到布局页面中:https://www.learnrazorpages.com/razor-pages/filters

【讨论】:

    猜你喜欢
    • 2017-10-14
    • 2018-11-18
    • 2012-08-01
    • 2018-06-14
    • 2015-09-08
    • 2020-01-05
    • 2021-03-22
    • 2019-11-10
    • 2016-03-15
    相关资源
    最近更新 更多