• システム開発に関わる内容をざっくりと書いていく

ASP.NET Core 404なのにコントローラがあるときの確認ポイント

コントローラもアクションもあるのに 404。ルーティング・属性・エンドポイント登録のどれかが外れていることが多い。

先に結論

  • まず URL とルートテンプレート(conventional / attribute)を突き合わせる
  • [Route] / [HttpGet] のテンプレートと HTTP メソッドを確認
  • MapControllers / UseEndpoints / Minimal API の登録漏れを疑う
  • エリア・プレフィックス・バージョン・ホスト制約も候補

チェックリスト

  1. 実際に叩いているパス(先頭スラッシュ・大文字小文字・末尾スラッシュ)
  2. コントローラ名の規約(XxxController)とルート名
  3. アクションの HTTP 属性がリクエストメソッドと一致しているか
  4. app.MapControllers() が呼ばれているか(ミドルウェア順も)
  5. [ApiController] + 属性ルーティングのみで、従来ルートが無い構成になっていないか
  6. 認証で 401/403 ではなく、本当に 404 か(ログで確認)

よくある原因

  • [Route("api/[controller]")] なのに /api/values/... 以外を叩いている
  • アクションに [HttpPost] しか無いのに GET で試している
  • 別プロジェクトのコントローラで、参照・起動アセンブリが違う
  • パスベースのリバースプロキシでプレフィックスが削れている/付いている

確認のコツ

  • 起動時にエンドポイントルート一覧を出す(デバッグ時)
  • Swagger / OpenAPI に出るかで「登録されているか」を見る
  • 404 ボディが空なら、ミドルウェアの早い段階で落ちていないかも見る

関連: DI Unable to resolve service(コントローラ生成失敗は別症状)

ざっくりまとめ

  • URL・属性・MapControllers の三点セット
  • メソッド不一致とプレフィックスずれが多い
  • Swagger に出るかで登録有無を切り分ける

関連記事