Cookies 能否使用asp.net核心中间件向请求添加cookie?
我正在尝试在ASP.net核心管道中编写自定义中间件,作为调用的一部分,我希望附加/添加cookie,以便管道中的下一个中间件可以访问这些cookie 设置cookie值时出现编译错误。有谁能推荐一种适合这种情况的方法吗 注意:当我尝试使用Response.Cookie时,它可以工作,但唯一的问题是,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
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”。遗憾的是,令牌头在重定向中没有保留,因此在myLoginController
中,令牌为空
使令牌对标准控制器和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,
});