ASP.Net Core 2多个控制器

Ton*_*ony 10 asp.net-core

我用One控制器创建了一个ASP.Net Core 2.0,没问题.然后我添加了另一个Controller,然后出现此异常:

InvalidOperationException:属性路由信息发生以下错误:

错误1:具有相同名称"Get"的属性路由必须具有相同的模板:操作:'Patrimonio.Controllers.CategoriaController.Getcc(Patrimonio)' - 模板:'api/Categoria/{id}'操作:'Patrimonio.Controllers .PatrimonioController.Getac(Patrimonio)' - 模板:'api/Patrimonio/{id}'Microsoft.AspNetCore.Mvc.Internal.ControllerActionDescriptorBuilder.Build(ApplicationModel application)

第一个控制器有

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

第二个了

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

即使使用GetacGetcc,ASP.Net Core 也会抱怨同名" Get ".

怎么解决这个?

Seb*_*edl 23

您的错误消息与您发布的代码不对应.但似乎[Http*(Name = "Get")]您的程序中有两个注释.但是,路径名称必须是唯一的.

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

或者更确切地说,从错误消息中可以看出,具有相同路由名称的两个操作必须具有完全相同的URL模板.原因是路由名称主要用于反向路由(即生成操作的URL),如果名称不唯一,则URL不明确 - 除非具有该名称的所有路由具有相同的模板.

尝试更换

[HttpGet("{id}", Name = "Get")]
Run Code Online (Sandbox Code Playgroud)

[HttpGet("{id}")]
Run Code Online (Sandbox Code Playgroud)