设置响应 ContentType 的中间件

2024-01-17

在我们基于 ASP.NET Core 的 Web 应用程序中,我们需要以下内容:某些请求的文件类型应获得自定义 ContentType 作为响应。例如。.map应该映射到application/json。在“完整”的 ASP.NET 4.x 中并与 IIS 结合使用,可以利用 web.config<staticContent>/<mimeMap>为此,我想用自定义 ASP.NET Core 中间件替换此行为。

所以我尝试了以下方法(为简洁起见,进行了简化):

public async Task Invoke(HttpContext context)
{
    await nextMiddleware.Invoke(context);

    if (context.Response.StatusCode == (int)HttpStatusCode.OK)
    {
        if (context.Request.Path.Value.EndsWith(".map"))
        {
            context.Response.ContentType = "application/json";
        }
    }
}

不幸的是,试图设置context.Response.ContentType调用中间件链的其余部分后会产生以下异常:

System.InvalidOperationException: "Headers are read-only, response has already started."

如何创建一个中间件来解决这个需求?


尝试使用HttpContext.Response.OnStarting打回来。这是发送标头之前触发的最后一个事件。

public async Task Invoke(HttpContext context)
{
    context.Response.OnStarting((state) =>
    {
        if (context.Response.StatusCode == (int)HttpStatusCode.OK)
        {
           if (context.Request.Path.Value.EndsWith(".map"))
           {
             context.Response.ContentType = "application/json";
           }
        }          
        return Task.FromResult(0);
    }, null);

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

设置响应 ContentType 的中间件 的相关文章

随机推荐

  • webgl 中的多个对象

    我正在尝试将一些对象渲染到画布上 但我在理解哪些内容不起作用时遇到了一些困难 我目前正在构建两个对象 它们代表我想要渲染的两个网格 如果我创建一个网格 代码可以正常工作 所以我认为问题在于 当我构建两个或更多网格时 数据会被搞砸 这是网格数
  • 对于 FragmentStatePagerAdapter 创建的 Fragment,Fragment getView() 始终返回 null

    我读了很多关于片段的文章 发现其他人在检索片段视图时遇到问题 因为总是返回 null 但没有答案解决我的问题 我想做的是创建一个图片库 我有一个包含图像视图的片段 为了显示片段 我使用 android support v4 view Vie
  • 具有多个源的 Optaplanner 影子变量

    Optaplanner 允许影子变量拥有多个源 sources 但只有一个variableListsnerClass 在我的实现中 我有一个带有影子变量的规划实体 应该能够由两个列表器更改 但这似乎不受支持 还是我错了 有没有办法让两个监听
  • Java 9中外部模块A和B将包some.package导出到模块C

    当我使用外部库运行应用程序时 我得到以下信息 Error occurred during initialization of boot layer java lang module ResolutionException Modules m
  • 在 JavaScript 中使用正则表达式删除下划线

    就像标题所说 我想用正则表达式删除字符串中的下划线 这就是我所拥有的 function palindrome str str str toLowerCase replace a zA Z g s g 0 9 g if str split r
  • 为什么java在SSL握手期间不发送客户端证书?

    我正在尝试连接到安全的网络服务 尽管我的密钥库和信任库已正确设置 但握手失败 经过几天的沮丧 无休止的谷歌搜索和询问周围的每个人 我发现唯一的问题是java选择在握手期间不将客户端证书发送到服务器 具体来说 服务器请求客户端证书 CN Ro
  • Gmail API 配额单位费用

    我们正在构建一项利用 Gmail API 的服务 为了了解我们在扩展过程中的成本 我想知道使用 Gmail API 的成本是多少 我已按照以下说明进行操作https developers google com gmail api v1 re
  • 从 Portlet 中删除自定义权限/操作

    我已经能够根据 Liferay Plugins SDK 中的示例定义自定义 portlet 操作 权限 https github com liferay liferay plugins tree master portlets sample
  • 如何在 Ubuntu 14.04 中使用 systemctl

    我尝试在 Ubuntu 14 04 中执行以下命令 systemctl enable now docker cleanup dangling images timer 我也用 sudo 尝试过 我尝试用 service 和 systemd
  • 按最后一个数组条目字段值过滤结果

    具有此文档结构 为了简洁省略不相关的字段 id 0 partn date ISODate 2015 07 28T00 59 14 963Z is partner true date ISODate 2015 07 28T01 00 32 7
  • Javascript,写入txt文件另存为UNICODE

    我有2根弦 希望首先创建一个 txt 文件 然后将字符串保存为 unicode function WriteFile file str str2 var tmp real url replace 20 g var WshNetwork ne
  • 根据 java.io/java.nio 进行阻塞

    我刚刚读 使用流的类位于两个包中 java io 和 java nio 以前实现的类 输入 输出 I O 阻塞 当字节被读 写时 进程中 它们对于其他执行线程变得不可用 这 后一个包提供非阻塞 I O 并提高了性能 并且想更多地了解这一点
  • Automapper 可以忽略 void 方法吗?

    我是 Automapper 的新手 所以我不确定这是否可行 我想映射一个类 但让它忽略无效的方法 下面是我的代码的说明 当我运行这个时 我收到以下异常消息 AutoMapper AutoMapperMappingException 类型的未
  • 如何将 JavaScript 函数传递给 Silverlight?

    我正在评估 JavaScript Silverlight 互操作功能 并且已经能够使用 JavaScript 创建 Silverlight 实例并调用其方法 但是 我现在需要一种将 JavaScript 回调函数传递给 Silverligh
  • iPhone OS 中的核心动画中的“图像错位”是什么?

    Instruments 表示存在由核心动画制作的 未对齐的图像 这意味着什么 更新 我在 Instruments app gt 核心动画中看到了这一点 我希望了解有关您在哪里看到此内容的更多信息 但我怀疑它指的是未像素对齐的图像 Quart
  • UDP 服务与亚马逊网络服务

    再会 我在一个硬件项目的基于云的系统中经常使用 AWS 使用 SimpleDB 和提供的通知服务很棒 然而 我需要 AWS 上的一个后端来监听传入的请求 处理请求并将其发送回特定地址 某种 UDP 服务 我可以轻松地为其编写一个 C C 应
  • Linq GroupBy 将每个空值作为一个组

    我有一个具有可为 null int 属性 GroupId 的对象 有了这个对象的列表 我想对此 GroupId 执行 GroupBy 操作 但如果我这样做 所有空值将形成一个组 例子 对象 1 GroupId NULL 对象 2 Group
  • 拉取镜像时设备上没有剩余空间

    在 Windows 10 Build 14393 下使用 Docker 1 13 0 9795 当我尝试运行最新的 python 映像 即 3 6 时 出现 设备上没有剩余空间 的情况 gt docker run it python Una
  • 根据 Java 日期在 Postgres 中保存时间戳

    我有一个 Postgres 数据库 其中有一个包含时间戳的表 timeOfProcessing TIMESTAMP 我有一个 Java 日期时间值 java util Date dateTime 并希望将其值存储在该时间戳字段中 没有时区
  • 设置响应 ContentType 的中间件

    在我们基于 ASP NET Core 的 Web 应用程序中 我们需要以下内容 某些请求的文件类型应获得自定义 ContentType 作为响应 例如 map应该映射到application json 在 完整 的 ASP NET 4 x