【问题标题】:Accessing a cookie value in an ASP.NET Core MVC Razor view在 ASP.NET Core MVC Razor 视图中访问 c​​ookie 值
【发布时间】:2018-01-09 03:45:06
【问题描述】:

当用户单击按钮时,我使用 JavaScript 设置了一个 cookie:

document.cookie = "menuSize=Large";

我需要以 razor 语法访问此 cookie,以便每次用户更改页面时都可以在 _Layout.cshtml 的顶部输出正确的样式:

    @{
        if (cookie == "Large")
        {
            <style>
LARGE STYLES
            </style>
        }
        else
        {
            <style>
SMALL STYLES
            </style>
        }
    }

【问题讨论】:

  • 嗨,将值放入 cookie 中是否重要?为什么你不把它放在一个viewbag?因此您可以轻松访问它。据我了解,您单击一个按钮,设置 cookie 并加载视图,因此您有一个回发。然后,正如我刚才提到的,为什么你不把价值放在 viewbag 里,然后用剃须刀抓住它。或者使用Request.Cookies,那就是:@Request.Cookies
  • 您的问题是什么?您不知道如何访问 cookie? Request.Cookie

标签: asp.net asp.net-mvc razor cookies asp.net-core-mvc


【解决方案1】:

您可以使用这种方法来获取 cookie 值。还要确保您的 cookie 域路径是 root。您还可以编写一些辅助方法来获取 C# 中的 cookie 值。

@{
        if (Context.Request.Cookies["menuSize"].Value== "Large")
        {
            <style>
                LARGE STYLES
            </style>
        }
        else
        {
            <style>
                SMALL STYLES
            </style>
        }
 }

【讨论】:

  • 由于某种原因智能感知无法识别 Request.Cookies。我最终让它与 Context.Request 一起工作。这是因为我使用的是 ASP.NET MVC Core 吗?
【解决方案2】:

我必须转到标题并手动提取我在客户端上创建/设置的 cookie:

//HACK ridiculous i have to do all this instead of just getting the cookie from the cookies collection
var cookieFromHeaderString = (context.HttpContext.Request.Headers["Cookie"]).FirstOrDefault();

if (cookieFromHeaderString != null)
{

    string[] strArray = cookieFromHeaderString.Split(new string[] { "; " }, StringSplitOptions.None);
    string whCookie = strArray.Where(m => m.StartsWith("vpWH=")).FirstOrDefault();

    if (whCookie != null)
    {
        int start = whCookie.IndexOf("=") + 1;
        string cookieValue = whCookie.Substring(start);

        string[] whArray = cookieValue.Split(' ');

        int viewportWidth = 0;
        int viewportHeight = 0;

        if (whArray.Length == 2)
        {
            int.TryParse(whArray[0], out viewportWidth);
            int.TryParse(whArray[1], out viewportHeight);
        }
    }
}

【讨论】:

    【解决方案3】:

    我遇到了同样的问题并做到了:

    @using Microsoft.AspNetCore.Http;
    
    @{
    
        if (HttpContext.Request.Cookies["menuSize"].Value == "Large")
        {
            <style>
                LARGE STYLES
            </style>
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-09
      • 2012-06-13
      • 2010-09-11
      • 2013-01-27
      相关资源
      最近更新 更多