如何检查 Asp.net Core MVC(又名 Asp.Net 5 RC1)中的响应 cookie?

2024-02-04

我正在将 Web 表单应用程序转换为 asp.net core mvc。在我的 Web 表单应用程序中,有时在我设置一些响应 cookie 后,其他代码需要查看它们是否已设置,如果是,则访问 cookie 的属性(即值、过期、安全、http)。在 Webforms 和 MVC 5 中,可以迭代 cookie 并返回任何特定的 cookie,如下所示(我知道的老派)

       for(int i = 0; i < cookies.Count; i++) {
            if(cookies[i].Name == cookieName) {
                return cookies[i];
            }
        }

但是asp.net core mvc中访问response cookies的接口是这样的:

基于此接口,我看不到一种方法来检查响应 cookie 是否存在并获取其属性。但一定有什么办法可以做到吗?

在操作方法中,我尝试在响应对象上设置两个 cookie,然后立即尝试访问它们。但智能感知没有显示任何允许我访问它们的方法、属性或索引器:

有一瞬间,我想也许我可以使用Response.Cookies.ToString();只需解析该信息即可找到我的 cookie 信息,但是唉,ToString()调用返回“Microsoft.AspNet.Http.Internal.ResponseCookies”,因为该对象不会覆盖默认实现。

只是为了好玩,我还检查了 GitHub 当前的开发分支,看看自 RC1 以来接口是否发生了变化,但它没有。那么给定这个接口,我如何检查响应 cookie 是否存在并获取它的属性?我曾考虑过尝试通过响应标头集合进行侵入,但这似乎很蹩脚。


有一个扩展方法可用Microsoft.AspNetCore.Http.Extensions called GetTypedHeaders()。这可以调用HttpContext.Response读书Set-Cookie标头。例如,在中间件中,我们可能想要拦截Set-Cookie响应头并替换它:

  public async Task Invoke(HttpContext httpContext)
        {
            httpContext.Response.OnStarting(state =>
            {
                var context = (HttpContext)state;

                var setCookieHeaders = context.Response.GetTypedHeaders().SetCookie;

                // We assume only one cookie is found. You could loop over multiple matches instead.
                // setCookieHeaders may be null if response doesn't contain set-cookie headers
                var cookie = setCookieHeaders?.FirstOrDefault(x => x.Name == "mycookiename");

                if (cookie == null)
                {
                    return Task.CompletedTask;
                }

                var opts = new CookieOptions
                {
                    HttpOnly = true,
                    Expires = DateTimeOffset.Now.AddHours(12),
                    SameSite = SameSiteMode.Lax,
                    Secure = true
                };

                context.Response.Cookies.Delete(cookie.Name.Value);
                context.Response.Cookies.Append(cookie.Name.Value, "mynewcookievalue", opts);
                
                return Task.CompletedTask;

            }, httpContext);

            await _next(httpContext);
        }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何检查 Asp.net Core MVC(又名 Asp.Net 5 RC1)中的响应 cookie? 的相关文章

随机推荐

  • 数据表和并行计算

    继这篇文章之后 R 中的多核和 data table https stackoverflow com questions 14697670 multicore and data table in r 我想知道在使用 data table 时
  • 使用 Mongo ObjectId 类型作为 Meteor 用户 ID

    我正在使用 Meteor 并且有一个关于覆盖 Meteor 用于用户 ID 的类型的默认行为的问题 我希望用户能够由唯一标识 idObjectId 类型的字段 而不是 Meteor 默认的任何类型 字符串 为了实现这种情况 我可以在某个地方
  • Android ListView多项选择在点击后不显示突出显示

    我有一个处于多选模式的ListView 我不想要复选框 我只是希望当我单击项目时 它们可以突出显示以显示选中状态 再次单击时 突出显示将消失并取消选中 所以现在我的问题是我的项目根本没有被检查和突出显示 我不知道为什么 这是代码 mFrie
  • 嵌套文件夹中的 web.config

    我正在尝试在另一个网络应用程序中安装一个应用程序 我有我的 aspx 页面和一些代码 我将其放入主应用程序的 app code 文件夹中 我已经为连接字符串等添加了自己的 web config 文件 但我认为存在冲突 所以我的问题是两个人
  • 如何为 opencart 多商店使用单独的语言文件?

    我使用的是 opencart 版本 1 5 5 1 我们有一个使用 opencart 框架编码的网站 该网站还使用 opencart 多商店功能 所有商店均使用英语 现在的问题是 是否可以针对不同的商店使用不同的语言标签 例如 一家商店与运
  • 如何在日语语言环境中显示反斜杠

    在我的应用程序中 我使用反斜杠作为基于文本的活动指示器的一部分 典型的 序列 我删除了 因为它具有不同的宽度 一切都很顺利 直到我看到我的应用程序在日本计算机上运行 反斜杠被替换为日语字符 我怎样才能避免这种情况 您可以使用 oOo 作为序
  • Cassandra:向表中添加新列

    您好 我刚刚在我的表 my table 中添加了一个新列 Business sys ALTER TABLE my table ALTER business sys TYPE set
  • 有没有办法在界面生成器中制作渐变背景色?

    对于我的应用程序 我使用 TableView 并使用自定义的 UITableViewCells 我通过界面生成器而不是以编程方式自定义了我的单元格 有没有办法在界面生成器中将自定义单元格的背景颜色设置为渐变 Thanks 这适用于 Swif
  • 上传多个文件显示错误代码:3

    这个问题和问的一样here https stackoverflow com questions 19275268 phonegap file transfer of picture fails on every other picture
  • NSTimer 一段时间后在后台停止

    当应用程序进入后台时 我使用 NSTimer 在 1 秒后调用一个方法 并在近 17 分钟后计时器停止工作 当它返回前台时 它再次开始工作 所以请告诉我为什么会发生这种情况以及如何解决该问题 我还尝试使用延迟递归的执行选择器来达到相同的目的
  • 调用 QtGui.QFileDialog.getExistingDirectory 时出错

    在 pyqt 代码中 我试图向用户提升一个对话框并让用户选择一个文件夹 看来 QtGui QFileDialog getExistingDirectory 方法应该能够做到这一点 问题是代码运行后有一些错误消息 D Lib debug pr
  • removeObject 是否释放 NSMutableArray 对象中的对象?

    我想知道当您在数组中使用removeObject 删除对象时 是否正确处理了删除的对象 被移除的对象会被释放吗 NSMutableArray 将释放它 如果这是最后一次保留 它将被释放 从文档中 与 NSArray 一样 NSMutable
  • 我的部分视图中的 Jquery 或 Javascript 问题

    我可以在部分视图中使用 jQuery 或 JavaScript 代码吗 我的部分视图中有一个网格 我试图在该部分视图中使用 jQuery 隐藏一个网格元素 我做不到 但如果我在没有部分视图的情况下使用它 相同的代码就可以工作 有人可以帮我吗
  • 委托不在单例中工作[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 为了在多个
  • Databricks - 无法从 DataFrame 写入 Delta 位置

    我想更改 Databricks Delta 表的列名称 所以我做了以下事情 Read old table data val old data DF spark read format delta load dbfs mnt main sal
  • 如何重建开发 Pod 变更?

    我有一个开发容器 我使用它在本地连接到我的应用程序 path gt Projects Swift pod 当我在该开发容器中的应用程序代码中进行更改时 构建后不会包含此更改 这就像我正在构建缓存代码 而不是更改我的代码 为了将代码更改包含到
  • 计算网络两个输出之间的 cosine_proximity 损失

    我正在使用 Keras 2 0 2 功能 API Tensorflow 1 0 1 来实现一个接受多个输入并产生两个输出的网络a and b 我需要使用 cosine proximity 损失来训练网络 这样b是标签a 我该怎么做呢 在这里
  • 在 makefile 中指定路径(Windows 上的 GNU make)

    我正在使用 GNU make 来构建一个使用 Microsoft Visual C 的项目 并且我希望能够从任何 CMD 窗口运行它 而不必打开预配置路径 以及各种其他环境变量 的预配置窗口通过批处理文件 理想情况下 我想在 makefil
  • 无法让 pyspark 作业在 hadoop 集群的所有节点上运行

    Summary 我无法运行我的 python spark 作业all我的 hadoop 集群的节点 我已经安装了 hadoop spark 1 5 2 bin hadoop2 6 的 Spark 启动 java Spark 作业时 负载得到
  • 如何检查 Asp.net Core MVC(又名 Asp.Net 5 RC1)中的响应 cookie?

    我正在将 Web 表单应用程序转换为 asp net core mvc 在我的 Web 表单应用程序中 有时在我设置一些响应 cookie 后 其他代码需要查看它们是否已设置 如果是 则访问 cookie 的属性 即值 过期 安全 http