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

Mar*_*cin 6 c# cookies asp.net-web-api asp.net-web-api2

我试图删除特定Set-Cookie的报头HttpResponseHeadersOnActionExecuted的方法ActionFilter.

我遇到的问题很少:

  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);
}
Run Code Online (Sandbox Code Playgroud)

cuo*_*gle 5

链接:

您无法直接删除用户计算机上的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);
}
Run Code Online (Sandbox Code Playgroud)

  • 我不想删除用户计算机上的 cookie。我只是不想在 Web-Api 中将 cookie 发送回用户,以防止某些 Web-api 操作滑动过期。所以我想删除特定的 Set-Cookie 标头。 (2认同)