2017-10-03 19 views
2

1つのコントローラでASP.Net Core 2.0を作成しましたが問題ありません。 は、その後、私は別のコントローラを追加し、その後、この例外が表示されます:ASP.Net Core 2複数のコントローラ

と、InvalidOperationException:次のエラーが 属性ルーティング情報で発生しました:

エラー1:同じ名前の属性ルート」を取得]同じを持っている必要があります テンプレート:アクション: 'Patrimonio.Controllers.CategoriaController.Getcc (パトリモニオ)' - テンプレート: 'API/Categoria/{ID}' アクション: 'Patrimonio.Controllers.PatrimonioController.Getac(パトリモニオ)' - テンプレート: ' api/Patrimonio/{id} ' Microsoft.AspNetCore.Mvc.Int ernal.ControllerActionDescriptorBuilder.Build(ApplicationModel アプリケーション)

第1のコントローラは、

// GET: api/Categoria 
[Route("api/Categoria")] 
public class CategoriaController : Controller 
... 
[HttpGet] 
public IEnumerable<string> Geta() 
{ 
    return new string[] { "value1", "value2" }; 
} 

第二は、あってもGetacGetcc

// GET: api/Patrimonio/5 
[Route("api/Patrimonio")] 
public class PatrimonioController : Controller 
... 
[HttpGet("{id}", Name = "Get")] 
public string Getac(string id) 
{ 
    return "value" + id; 
} 

を有し、を有しますASP.Netのコアは、名前「」を取得します。

これを解決するにはどうすればよいですか?

+1

興味深いと

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

交換してみてください!これはうまくいくはずです。他のどこかで使用している他のルーティング定義コードがありますか? – Shyju

+0

私はapp.UseMvc()を試しました。 //app.UseMvcWithDefaultRoute();これを解決する効果はないようです。 – Tony

答えて

8

あなたのエラーメッセージは、あなたが投稿したコードに対応していません。しかし、あなたのプログラムには2つの[Http*(Name = "Get")]注釈があるようです。ただし、経路名は一意でなければなりません。

https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/routing#route-name

以上正確には、同じルート名を持つ2つのアクションがまったく同じURLテンプレートを持たなければならないというエラーメッセージから表示されます。その理由は、ルート名が主に逆方向ルーティング(つまり、アクションへのURLの生成)に使用され、その名前が一意でない場合、その名前のすべてのルートが同じテンプレートを持っていない限り、URLはあいまいです。

[HttpGet("{id}")] 
+0

あなたは正確に診断されました。私はASP.Netコアが "Name" = "Get"という属性宣言に不満を持っていたことを知りませんでした。私はそれが方法の名前を取得したことになった。 – Tony

関連する問題