Cookies 能否使用asp.net核心中间件向请求添加cookie?

Cookies 能否使用asp.net核心中间件向请求添加cookie?,cookies,asp.net-core,request,session-cookies,middleware,Cookies,Asp.net Core,Request,Session Cookies,Middleware,我正在尝试在ASP.net核心管道中编写自定义中间件,作为调用的一部分,我希望附加/添加cookie,以便管道中的下一个中间件可以访问这些cookie 设置cookie值时出现编译错误。有谁能推荐一种适合这种情况的方法吗 注意:当我尝试使用Response.Cookie时,它可以工作,但唯一的问题是,Cookie只在浏览器的下一个请求上进行反射,但我需要在执行此操作后立即在管道中的下一个中间件上进行反射 下面是代码片段 public async Task Invoke(HttpContext

我正在尝试在ASP.net核心管道中编写自定义中间件,作为调用的一部分,我希望附加/添加cookie,以便管道中的下一个中间件可以访问这些cookie

设置cookie值时出现编译错误。有谁能推荐一种适合这种情况的方法吗

注意:当我尝试使用Response.Cookie时,它可以工作,但唯一的问题是,Cookie只在浏览器的下一个请求上进行反射,但我需要在执行此操作后立即在管道中的下一个中间件上进行反射

下面是代码片段

  public async Task Invoke(HttpContext httpContext)
        {


            var queryParameters = httpContext.Request.Query;
            var cookies = httpContext.Request.Cookies;
            if (!cookies.ContainsKey(".AspNetCore.Session")
                || cookies[".AspNetCore.Session"] != "new_key")
            {
httpContext.Request.Cookies[“.AspNetCore.Session”]=“新密钥”


不能在同一请求中使用cookie的值。但是,您可以使用良好的旧
HttpContext.Items

public async Task InvokeAsync(HttpContext context)
{
    context.Request.HttpContext.Items["key"] = "Hello!";
    await _next(context);
}
然后将其检索为

var value = HttpContext.Items["key"];

在我的例子中,我有一个
AuthorizationHandler
,它执行一些检查以确定用户详细信息以及用户是否登录。auth处理程序将其中一些信息存储在请求头中的令牌中,因此控制器可以轻松访问这些信息

当用户登录时,可以从标准控制器中的
HttpContext.Request.Headers
读取此令牌,一切正常

当用户未登录时,身份验证处理程序返回failure,因此请求被重定向到“/login”。遗憾的是,令牌头在重定向中没有保留,因此在my
LoginController
中,令牌为空

使令牌对标准控制器和
LoginController
都可用的唯一方法是将令牌存储在请求头和响应cookie中。可以从
HttpContext.Request.Cookies
集合中的
LoginController
读取此cookie。我将它设置为短暂的,因为它只需要短暂的时间(5秒后就会消失)

以下是我的身份验证处理程序的部分代码:

  HttpRequest request = _httpContextAccessor.HttpContext.Request;
  HttpResponse response = _httpContextAccessor.HttpContext.Response;

  request.Headers["X-Token"] = encryptedToken;
  response.Cookies.Append("TokenCookie", encryptedToken, new CookieOptions
    {
        MaxAge = TimeSpan.FromSeconds(5),
        Secure = true,
        IsEssential = true,
    });

谢谢你的及时回复。。。在我的情况下,我需要修改我的asp.net核心会话cookie。。。因此,在管道的其余部分,它将自动处理。。。。这是在我们的项目中使用asp.net模块实现的。。。。我们可以在其中修改请求cookie。在这里,我们正试图迁移到asp.net core,因此在设置请求Cookie时遇到困难。如果不修改asp.net core的源代码,在中间件中更改RequestCookieCollection的值似乎是不可能的。我的解决方法与Win的非常相似。我经常使用这样的标题:context.Request.headers[“headerkey”]=“headervalue”;然后像这样检索它们:Request.Headers[“headerkey”]谢谢Win和Guogangj。我可以理解您使用头或项传递值的解决方案。实际上,我们正在尝试修改Asp.net核心创建的会话cookie,以维护和识别浏览器的会话。这个修改请求cookie的功能在Asp.net中可用,因此我也在寻找同样的功能。从您的回答可以清楚地看出,我们无法修改请求cookie。我需要寻找不同的方法,而不是修改cookie。再次感谢。
  HttpRequest request = _httpContextAccessor.HttpContext.Request;
  HttpResponse response = _httpContextAccessor.HttpContext.Response;

  request.Headers["X-Token"] = encryptedToken;
  response.Cookies.Append("TokenCookie", encryptedToken, new CookieOptions
    {
        MaxAge = TimeSpan.FromSeconds(5),
        Secure = true,
        IsEssential = true,
    });