如果请求带有某个cookie集,我想删除该cookie,并重定向回相同的操作(并保留查询字符串,路由值等)。
我希望在第二个(重定向)请求中,cookie将会消失。 但事实并非如此。
我的行动方法:
[DeleteCookie]
public virtual ActionResult doStuff() {
// blah
}
我的动作过滤器:
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class DeleteCookieAttribute : ActionFilterAttribute {
public override void OnActionExecuting(ActionExecutingContext context) {
var request = context.HttpContext.Request;
if (request.Cookies.AllKeys.Contains("foo")) {
request.Cookies["foo"].Expires = DateTime.Now.AddYears(-1); // I tried this
request.Cookies.Remove("foo"); // I tried this
context.Result = new RedirectToRouteResult(context.RouteData.Values);
}
base.OnActionExecuting(_filterContext);
}
}
在第一次请求期间,一旦我删除了cookie,它就会从请求中消失。但在第二个重定向请求中,它仍然存在!所以上面的代码进入了无限循环。
如何删除它?
答案 0 :(得分:2)
试试这个:
HttpCookie cookie = Request.Cookies["foo"];
if (cookie != null)
{
cookie .Expires = DateTime.Now.AddYears(-1);
Response.Cookies.Add(cookie);
}
答案 1 :(得分:0)
我正在添加一些与Cookie相关的非常重要的点。
请参阅以下解决方案以供参考。
if(Request.Cookies [“userId”]!= null)
{
Response.Cookies [“userId”]。Expires = DateTime.Now.AddDays(-1);
}
请检查是否存在Cookie,不要使用删除关键字,否则无效。
答案 2 :(得分:0)
分享最佳方式之一,它可以帮助您了解更多。,您也可以使用天。
这不是非常强制性的,您只需添加年份
HttpCookie cookie = Request.Cookies [“testcookie”];
if(cookie!= null)
{
cookie.Expires = DateTime.Now。 AddDays ( - 1);
Response.Cookies.Add(饼干);
}
答案 3 :(得分:0)
我无法让 cookie 过期和页面重定向(至少不是通过 MVC)。
如本答案所述:https://stackoverflow.com/a/21134768/2068719
我不得不使 cookie 过期,然后显示一个视图,并在该视图中重定向。 (在我的例子中,我使用 RedirectToAction 重定向回相同的控制器操作。)
@{
ViewBag.Title = "Expire";
Layout = null;
Response.Redirect( Url.Action("Index", "Home"), false);
}