質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

ASP.NET Web API

ASP.NET Web APIはブラウザやモバイル機器のようなクライアント向けのHTTPサービスを構築するフレームワークです。Microsoft .NET Frameworkがベースになっており、RESTfulサービスを構築するには理想的です。

Q&A

解決済

1回答

4293閲覧

ASP.NET Core のルーティングについて、エラー原因が知りたいです。

ryu_k

総合スコア19

ASP.NET

ASP.NETは動的なWebサイトやWebアプリケーション、そしてWebサービスを構築出来るようにする為、Microsoftによって開発されたウェブアプリケーション開発フレームワークです。

ASP.NET Web API

ASP.NET Web APIはブラウザやモバイル機器のようなクライアント向けのHTTPサービスを構築するフレームワークです。Microsoft .NET Frameworkがベースになっており、RESTfulサービスを構築するには理想的です。

0グッド

0クリップ

投稿2020/05/19 03:10

編集2020/05/19 07:18

環境

.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・・・

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/05/19 04:36

Core のバージョンぐらいは書きませんか? Web API ですよね? プロジェクトを作る時 Visual Studio のテンプレートを利用したと思いますが、何を使ったか詳しく書いてください。
ryu_k

2020/05/19 05:12

ご覧いただきありがとうございます。 バージョン(.NET Core 3.1)、ならびに、詳しい操作手順を本文に追記しました。 よろしくお願いします。
退会済みユーザー

退会済みユーザー

2020/05/19 05:30

> WebAPIのコントローラーを追加するために以下操作を行いました。 そこが知りたいわけではなくて、おおもとのプロジェクトを作成するときにどのようにしたかということが知りたいのですが。たとえば、MVC 用として作ったプロジェクトの Startup.cs は Web API 用とは少々異なるはずで、そのあたりの影響があるかもしれませんし(ないかもしれませんが)。
ryu_k

2020/05/19 07:15

ありがとうございます。理解できました。 たしかに、おおもとのプロジェクトを作成するときは「ASP.NET Core Webアプリケーション」で作成していました。 その後WEBAPIも使いたいので、「Startup.cs」も編集しました。 エラーの発生している箇所は、「Startup.cs」です。 追記します。
guest

回答1

0

ベストアンサー

[HttpGet("{id}", Name = "Get")]

の , Name = "Get" が原因ではないかと思います。それを削除してみたらどうなりますか?

【追記】

以下の記事を見てください。

ルート名
https://docs.microsoft.com/ja-jp/aspnet/core/mvc/controllers/routing?view=aspnetcore-3.1#route-name

質問者さんが設定した Name = "Get" の Get はルート名となり、上の記事によると "ルート名は、アプリケーション全体で一意である必要があります" ということです。

投稿2020/05/19 08:07

編集2020/05/19 08:18
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ryu_k

2020/05/20 02:51

ご教示いただきありがとうございます。 Getを削除することで正常に動作することが確認できました。 記事のご紹介ありがとうございます。 Nameの意味を理解することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問