有一个简单(但有点hacky)的答案,以及使第一个选项过时的主角(编辑:实际上是第三个,更好的选项).
目前典型的解决方案是简单地使用Handlermonad具有MonadError ServantErr实例的事实,这ServantErr是一个非常通用的"响应类型",它确实可以描述应用程序错误的HTTP响应,但也可以实现重定向或许多其他事情. .所以你可以做点什么throwError $ err301 { errHeaders = [("Location", "https://haskell.org/")] }.这很难看,因为我们劫持了一些成功工作流程的"错误输出".但它有效,并且是一行代码.
我已经探索了替代方法,让您可以将类型安全链接与重定向混合,以轻松地重定向到应用程序的其他端点/页面.这已经过时了,但可能没有太多麻烦就可以工作.
在看到这个问题后,我刚才想到了第三种选择.花了一些时间来试验它,看起来像是有效的!您可以通过在此要点中使用它的示例来查看代码.如果您有任何疑问,请告诉我.我们可能想要将一些内容添加到servant中.如果您觉得这个问题足够好,请随意在问题跟踪器上提出来.这种方法的要点是定义一个PostRedirect具有正确形状的自定义(没有响应主体,具有您选择的类型的Location头,并且您希望重定向使用的状态代码进行参数化),以及一个小功能在返回之前适当地包裹位置.
| 归档时间: |
|
| 查看次数: |
531 次 |
| 最近记录: |