Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# .NET MVC 5在页面加载时重置cookie_C#_Asp.net_Asp.net Mvc_Razor_Cookies - Fatal编程技术网

C# .NET MVC 5在页面加载时重置cookie

C# .NET MVC 5在页面加载时重置cookie,c#,asp.net,asp.net-mvc,razor,cookies,C#,Asp.net,Asp.net Mvc,Razor,Cookies,我有一个奇怪的问题,我试图在Razor视图中设置cookie值,如下所示: @{ Layout = "~/Views/Shared/_Layout.cshtml"; HttpCookie e = new HttpCookie("d"); e.Value = @Url.RequestContext.RouteData.Values["id"].ToString(); e.Expires = DateTime.Now.AddMonths(999); // expire

我有一个奇怪的问题,我试图在Razor视图中设置cookie值,如下所示:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
    HttpCookie e = new HttpCookie("d");
    e.Value = @Url.RequestContext.RouteData.Values["id"].ToString();
    e.Expires = DateTime.Now.AddMonths(999); // expires after 30 days
    Response.Cookies.Add(e);
}
@foreach(//some collection)
{
  <a href="/Items/Index/@Request.Cookies["d"].Value"></a>
}
/Items/Index/user123
然后我根据这个cookie值形成URL,如下所示:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
    HttpCookie e = new HttpCookie("d");
    e.Value = @Url.RequestContext.RouteData.Values["id"].ToString();
    e.Expires = DateTime.Now.AddMonths(999); // expires after 30 days
    Response.Cookies.Add(e);
}
@foreach(//some collection)
{
  <a href="/Items/Index/@Request.Cookies["d"].Value"></a>
}
/Items/Index/user123
和下一个路由id值:

user1234
当页面第一次加载链接时,如下所示:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
    HttpCookie e = new HttpCookie("d");
    e.Value = @Url.RequestContext.RouteData.Values["id"].ToString();
    e.Expires = DateTime.Now.AddMonths(999); // expires after 30 days
    Response.Cookies.Add(e);
}
@foreach(//some collection)
{
  <a href="/Items/Index/@Request.Cookies["d"].Value"></a>
}
/Items/Index/user123
当我第二次将路由id值作为user1234传递时,链接仍然保持不变,如下所示:

/Items/Index/user123
只有第三次刷新页面时,URL才会更改为:

/Items/Index/user1234
我想在每次页面加载时将cookie值设置为一个新值,然后根据存储在cookie中的路由id值形成url


我做错了什么?

这里没有什么奇怪的。想想流程:

视图第一次加载id
user123
。引擎执行响应并使用此值创建cookie。cookie将与响应一起提供,但它仅在下一次请求时可用

在id为
user1234
的第二个请求中,cookie现在可用,具有上一个响应中的值(
user123
),因此您可以在链接中获得该值,尽管您现在正在响应中将其设置为下一个值(
user1234

换句话说,您总是落后一步,因为您试图设置cookie并同时读取cookie。要设置cookie,必须首先将其发送回浏览器,以便在后续请求中可以使用


您可以通过首先检查cookie是否存在来修复此问题。如果没有,则使用路由数据中的值生成链接并设置cookie,否则使用cookie中的值生成链接。

我是否应该将其设置为实际操作?或者有什么解决办法?@User987:我更新了我的答案,让你知道如何解决这个问题。好吧,但是当cookie确实存在并且路由id保持不变时,会怎么样?在我看来,你不太了解你在做什么,就好像你试图通过路由数据来识别用户,然后从那里保存身份,对吗?如果是这种情况,我建议将cookie设置代码移动到控制器基或属性,并将链接的生成留给视图。好的,我解决了它,我只使用最初的路由值id,然后在其他页面上使用cookie值。。