Angular 4.3 HttpClient:拦截响应

2024-03-29

在有关新的文档中HttpClientModuleAngular 4.3的新版本中,拦截请求的机制解释得非常好。还提到了响应拦截器机制,但我找不到任何相关内容。

有谁知道如何拦截响应以便在将正文消息发送到服务之前修改正文消息?

Thanks.


我最近做了一个HttpInterceptor为了解决客户端某些 JSON 中的循环引用,本质上是将任何对象替换为$ref属性与 JSON 中具有匹配的对象$id财产。 (这是如果 Json.Net 配置为PreserveReferencesHandling.Objects and ReferenceLoopHandling.Ignore).

这里的答案在某种程度上帮助了我,但没有一个显示如何修改响应的正文,就像OP的需求一样。为此,需要克隆事件并更新正文,如下所示:

intercept(req: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>> {
    return next.handle(req).map(event => {
        if (event instanceof HttpResponse && shouldBeIntercepted(event)) {
            event = event.clone({ body: resolveReferences(event.body) })
        }         
        return event;
    });
}

任何不应修改的事件都会简单地传递到下一个处理程序。

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

Angular 4.3 HttpClient:拦截响应 的相关文章

随机推荐

  • C++ 根据其他模板参数推导模板参数

    假设我有以下课程 template
  • Hibernate Criteria:如果其任何子级的子级具有特定属性,则查找实体

    我需要编写一个 Criteria 或 hql 来通过子实体的子实体的属性查找父实体 这是我的实体 The top level parent class public class A private Long id private Strin
  • Apple Touch Bar 按键未触发按键事件

    当我想监听 Apple Touch Bar 按键时 是否还有其他事件可以监听 具体来说 我想监听 Escape 按键事件 我的代码适用于 常规 键盘 带有实际的转义键 但不适用于触摸栏 listenForKeypressEvent e gt
  • Kotlin 支持单子理解吗?

    就像 C 中的 LINQ Scala 中的理解一样 Kotlin 中有类似的东西吗 如果不支持 有计划吗 没有特殊的关键字 do for 因此不像其他语言那样直接翻译为嵌套的 flatMap 脱糖 但是一元理解可以通过协程来实现 来自箭头文
  • 如何用 str_replace() 替换所有出现的两个子字符串?

    目前我有这段代码 它将任何双空格替换为 br 它按预期工作 tr class td Garments td td str replace br br trim result garment type td tr 不过我想做另一个str re
  • Android - 将大量数据传递给在不同进程上运行的服务

    有没有可能的方法将大量数据传递到与主活动不同的进程上运行的Android服务中 要传递的数据是大约 5Mb 的字节数组 如前所述 我无法将数据保存到文件中进行传输 需要纯粹通过内存或任何其他不持久保存到文件 数据库等的方式进行传输 我尝试过
  • 如何使用 CSS 将两个箭头图像(赞成/反对)堆叠在一起?

    向上箭头 gif 和向下箭头 gif So it would look like so 如何创建 3 个 div 并使用 CSS 设计它们的样式 以便这些箭头位于顶部箭头位于底部箭头上方的位置 div class vote div clas
  • Python 脚本给出“:没有这样的文件或目录”

    我有几个 python 脚本 它们工作得很好 但如果我尝试从 bash 运行它 一个脚本 截至今天早上 开始给我这个错误 没有这样的文件或目录 我可以通过执行以下操作来运行 损坏 的脚本python script name py环顾四周后
  • .gitattributes 涂抹和清理过滤器作为存储库的一部分

    我的 git 存储库中有许多模板文件 它们以不同的速率变化 然后使用它们生成 HTML 页面 如果有人报告问题 我希望他们能够告诉我模板文件的哪个版本有问题 目前 我在更改日期时手动将日期输入到文件中 或者 好吧 我尝试这样做 大多数时候我
  • 如何在 Lua 中下载文件,但在运行时写入本地文件

    我正在尝试制作一个更新程序 以便当我的 Lua 应用程序过时时它将使用LuaSocket下载较新的 exe 文件 可以运行我的 Lua 代码 在这个更新程序中 我希望它显示到目前为止已下载的数量 但是 通过以下 HTTP 请求 它会阻止应用
  • 如何以编程方式检查 iOS 上的方向是否已锁定 - Swift

    有没有办法在旋转发生之前以编程方式检查 iPod 方向锁定是否已启用 例如 如果用户要单击按钮 我们是否可以检查方向锁定是否打开 以提醒他们在单击操作发生之前必须关闭方向锁定 目前还没有办法检测方向是否被锁定 您可以只添加应用程序中应支持的
  • 如何将新的键值对添加到现有对象中

    我有一个简单的功能 function pagination opt limit console log opt logs out this gt Object limit 2 layout getConversations if typeo
  • web.xml 中的 cvc-id.3 错误

    在 Eclipse 中为 SpringMVC Web 应用程序编辑 web xml 文件时 我收到此错误消息 cvc id 3 身份字段 约束 web app servlet 名称 唯一性 匹配元素 web app 但是这个 元素没有简单类
  • 确定 Windows 当前是否正在播放声音

    所以我对这个问题思考了一段时间 但我不知道解决这个问题的正确方法是什么 我想使用以下命令确定 Windows 是否在某个时间输出声音Powershell脚本 我可以确定音频驱动程序是否有错误 但我无法确定系统是否正在播放声音 我看了看 NE
  • ruby Date.today 和 DateTime.now 的日期错误

    我已经使用 RVM 安装了 ruby 1 8 6 p383 系统 ruby 是 1 9 1 p378 1 使用 ruby 1 8 时 我从 Date today 和 DateTime now 得到错误的日期 而 Time now 是正确的
  • 从 SVN 获取最后一个文件提交日期

    Subversion 菜鸟 所以请耐心等待 有没有办法从命令行获取文件的最后提交日期 svn info filename
  • Laravel 真的这么慢吗?

    我刚刚开始使用 Laravel 我几乎还没有编写任何代码 但我的页面加载需要将近一秒钟 当我的无框架应用程序和 NodeJS 应用程序花费约 2 毫秒时 这让我有点震惊 拉拉维尔在做什么 这不是正常行为 是吗 是否需要一些微调 Larave
  • 无法使用php在mysql中保存大文本

    query INSERT INTO ARTICLES TITLE BY IN POST VALUES title by in POST post 该代码能够保存小长度文本 但不能保存大文本 的数据类型为POST字段是长文本 另外 如果我通过
  • 使用 C# (telerik) 在 wpf 中自定义弹出窗口的设计

    我在按钮单击事件中显示一个弹出窗口 gt 我在该弹出窗口中保留了一个自定义用户控件 因此每当显示弹出窗口时 都会显示自定义用户控件 但现在我需要修改自定义控件 弹出窗口中当前的自定义控件如下所示 但我需要角落看起来像下面的图片 如何做到这一
  • Angular 4.3 HttpClient:拦截响应

    在有关新的文档中HttpClientModuleAngular 4 3的新版本中 拦截请求的机制解释得非常好 还提到了响应拦截器机制 但我找不到任何相关内容 有谁知道如何拦截响应以便在将正文消息发送到服务之前修改正文消息 Thanks 我最