一种从WebApi中的HttpRequestHeaders中删除特定cookie的方法

时间:2015-10-19 13:18:31

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

我尝试在Set-Cookie的{​​{1}}方法中删除HttpResponseHeaders中的特定OnActionExecuted标题。

我对此几乎没有问题:

  1. 我看不到枚举标头的方式。这个系列总是如此 即使我在调试器中看到标题,也是空的。
  2. 因为我不能 枚举,我无法删除特定的标题。我只能删除所有 标题具有相同的键,但ActionFilter可以有多个 条目。
  3. 目前我删除了所有Cookie,但这不是我想要的。

    Set-Cookie

1 个答案:

答案 0 :(得分:6)

来自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);
}