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

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

我懂了
foo: bar
foo: baz

但我只想
foo: baz

在我的情况下, header 是身份验证 token ,并且它的工作方式是:如果请求中存在 header ,则我将其发送回响应中。我将其实现为中间件。但是,如果是登录请求,则会生成一个新 token ,并且应该发送该 token ,而不是发送来自请求 header 的值。

最佳答案

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

使用addHeader是不可能的。

可以通过使用 sendWaiResponse 并手动创建Response来实现,但这很麻烦。

10-08 12:39