在 Yesod 中覆盖响应 header

Overwrite response header in Yesod

如何覆盖以前在 Yesod 中设置的响应 header?当我使用 addHeader 函数时,它会添加另一个具有相同名称的 header 而不是覆盖它。例如,如果在处理函数内部,我会这样做:

addHeader "foo" "bar"
addHeader "foo" "baz"

我明白了

foo: bar
foo: baz

但我只想

foo: baz

在我的例子中,header 是一个身份验证令牌,它的工作方式是,如果它出现在请求中,那么我会在响应中发回它。我将其实现为中间件。但是,如果是登录请求,则会生成一个新令牌,并且应该发送它而不是请求中的值 header.

addHeader 由 Writer 实施。 https://www.stackage.org/haddock/lts-8.21/yesod-core-1.4.35/src/Yesod.Core.Handler.html#addHeaderInternal

无法使用 addHeader

sendWaiResponse手工创建Response也可以实现,但是比较乱