【问题标题】:A way to remove specific cookie from HttpRequestHeaders in WebApi一种从 WebApi 中的 HttpRequestHeaders 中删除特定 cookie 的方法
【发布时间】:2016-01-17 20:44:28
【问题描述】:

我正在尝试在ActionFilterOnActionExecuted 方法中从HttpResponseHeaders 中删除特定的Set-Cookie 标头。

我有几个问题:

  1. 我看不到枚举标题的方式。收藏总是 空的,即使我在调试器中看到标题。
  2. 因为我不能 枚举,我无法删除特定的标题。我只能删除所有 具有相同键的标题,但 Set-Cookie 可以有多个 条目。

目前我正在删除所有 cookie,但这不是我想要的。

public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{                
   HttpResponseHeaders headers = actionExecutedContext.Response.Headers;
   IEnumerable<string> values;
   if (headers.TryGetValues("Set-Cookie", out values))
   {
       actionExecutedContext.Response.Headers.Remove("Set-Cookie");
   }

   base.OnActionExecuted(actionExecutedContext);
}

【问题讨论】:

  • 你有解决这个问题的办法吗?
  • @KalpeshBoghara 只能通过解决方法。在过滤器中为特定操作添加上下文项OnActionExecutingHttpContext.Current.Items.Add("RemoveAuthCookieKey", true);。然后在 Global.asax 中 Application_EndRequest 如果密钥存在 this.Response.Cookies.Remove(FormsAuthentication.FormsCookieName);

标签: c# cookies asp.net-web-api asp.net-web-api2


【解决方案1】:

来自link

您不能直接删除用户计算机上的 cookie。但是,您可以通过将 cookie 的到期日期设置为过去的日期来指示用户的浏览器删除 cookie。下次用户向设置 cookie 的域或路径中的页面发出请求时,浏览器将确定 cookie 已过期并将其删除。

那么,如何在操作过滤器级别删除/删除 ASP.NET Web Api 中的 cookie,只需尝试将 cookie 的到期日期设置为过去的日期:

public override void OnActionExecuted(HttpActionExecutedContext actionExecutedContext)
{
    var response = actionExecutedContext.Response;
    var request = actionExecutedContext.Request;

    var currentCookie = request.Headers.GetCookies("yourCookieName").FirstOrDefault();
    if (currentCookie != null)
    {
        var cookie = new CookieHeaderValue("yourCookieName", "")
        {
            Expires = DateTimeOffset.Now.AddDays(-1),
            Domain = currentCookie.Domain,
            Path = currentCookie.Path
        };

        response.Headers.AddCookies(new[] { cookie });
    }

    base.OnActionExecuted(actionExecutedContext);
}

【讨论】:

  • 我不想删除用户计算机上的 cookie。我只是不想在 Web-Api 中将 cookie 发送回用户,以防止某些 Web-api 操作的滑动过期。所以我想删除特定的 Set-Cookie 标头。
  • 好的,那我很好奇你为什么要这么做@Marcin?
  • 我有一个内部使用 web api 的 web 应用程序。它用于简化请求,并负责将返回的格式返回到 javascript 等。因为我使用的是表单身份验证,所以 cookie 会在一段时间后发送,以延长过期时间。我的应用程序中几乎没有自动在后台调用的操作。所以我想阻止他们延长 Auth cookie 的过期时间。
猜你喜欢
  • 2019-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-16
  • 1970-01-01
  • 2012-12-15
相关资源
最近更新 更多