環境
.NET Core 3.1
VisualStudio2019
発生している問題・エラーメッセージ
System.InvalidOperationException: 'The following errors occurred with attribute routing information: Error 1: Attribute routes with the same name 'Get' must have the same template: Action: 'Test.Controllers.AAAController.Get (Test)' - Template: 'api/AAA/{id}' Action: 'Test.Controllers.BBBController.Get (Test)' - Template: 'api/BBB/{id}'
操作したこと
VS2019にて「ASP.NET Core Webアプリケーション」にて作成しました。
その後WebAPIを使用していたため、Startup.csを編集しました。
app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); ←★ endpoints.MapControllers(); ←これを追記。 });
WebAPIのコントローラーを追加するために以下操作を行いました。
1.プロジェクトの右クリックで「追加→コントローラー」
2.表示された「新規スキャフォールディング アイテムの追加」ダイアログで
3.「読み取り/書き込みアクションがある APIコントローラー」をを指定
上記操作でコントローラーを2つ作成しました。
・AAAController
・BBBController
サーバー起動後、URLにてアクセスすると★の箇所で上記エラーメッセージが表示されました。
ただし、AAAController1つのみを作成している場合はエラーは発生しません。
(下記のソースコードは自動生成されたもので手を加えていないものです)
疑問におもうこと
AAAControllerのみの時には api/AAA/5 (Get)でサーバーに到達できます。
BBBControllerを作成しても それぞれ、
api/AAA/5 (Get) 、 api/BBB/5(Get)
で到達できていいものではないかと思いました。
ルーティングがかぶっていることにはならない(だから問題ない)と思っているのですが、
なぜエラーになるのかご教示いただける方いませんでしょうか。
よろしくお願いいたします。
該当のソースコード
C#
1namespace Test.Controllers 2{ 3 [Route("api/[controller]")] 4 [ApiController] 5 public class AAAController : ControllerBase 6 { 7 // GET: api/BBB 8 [HttpGet] 9 public IEnumerable<string> Get() 10 { 11 return new string[] { "value1", "value2" }; 12 } 13 14 // GET: api/AAA/5 15 [HttpGet("{id}", Name = "Get")] 16 public string Get(int id) 17 { 18 return "value"; 19 } 20 21・・・
C#
1namespace Test.Controllers 2{ 3 [Route("api/[controller]")] 4 [ApiController] 5 public class BBBController : ControllerBase 6 { 7 // GET: api/BBB 8 [HttpGet] 9 public IEnumerable<string> Get() 10 { 11 return new string[] { "value1", "value2" }; 12 } 13 14 // GET: api/BBB/5 15 [HttpGet("{id}", Name = "Get")] 16 public string Get(int id) 17 { 18 return "value"; 19 } 20 21・・・
回答1件
あなたの回答
tips
プレビュー