You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Akka HTTP新增Basic认证后delete接口返回405方法不支持问题排查

问题诱因
  • seal 是 Akka HTTP 中用于将路由封装为完整独立分支的指令,它会为被包裹的路由自动注入默认的404、405等标准化错误处理逻辑。一旦进入seal包裹的路由分支且没有匹配到对应请求,就会直接返回错误响应,不会继续向后传递请求匹配concat中的后续分支。
  • 你的代码中给每个独立的子路由都单独包裹了seal,DELETE请求进入后,先匹配第一个get路由失败,随后进入第二个seal包裹的子路由,该子路由内仅定义了PUT相关接口,没有匹配到DELETE方法,就直接返回了405错误,根本没有进入你写的DELETE接口所在的第三个seal分支。
  • 报错中提示的支持方法为PUT,正是第二个seal包裹的子路由中支持的HTTP方法。
修复方案

不要给每个子路由单独添加seal包裹,seal仅需要作用在最外层的整个路由结构上,保证所有路由分支都匹配失败时,再返回统一的标准化错误即可,参考结构如下:

seal(
  concat(
    get {
      // 原有正常工作的get逻辑
    },
    // 原有正常工作的其他路由逻辑
    authenticateBasic(
      realm = "Secure foo",
      scopeAuthenticator
    ) { scopes =>
      delete {
        handleErrorsAndReport("delete_foo") {
          fooRepository.deleteFoo(fooId, scopes)
          complete(NoContent)
        }
      }
    }
  )
)

内容的提问来源于stack exchange,提问作者Niko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:18:03