gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 21:38:40 26 4
gpt4 key购买 nike

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

我对此没有什么问题:

  1. 我看不到枚举标题的方式。收藏总是空,即使我在调试器中看到 header 。
  2. 因为我不能枚举,我不能删除特定的标题。我只能删除所有具有相同 key 的 header ,但 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);
}

最佳答案

来自link :

You cannot directly delete a cookie on a user's computer. However, you can direct the user's browser to delete the cookie by setting the cookie's expiration date to a past date. The next time a user makes a request to a page within the domain or path that set the cookie, the browser will determine that the cookie has expired and remove it.

那么,如何在 Action 过滤器级别在 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);
}

关于c# - 一种从 WebApi 中的 HttpRequestHeaders 中删除特定 cookie 的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33215502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com