ASP.Net Core 2多个控制器

时间:2017-10-03 20:41:13

标签: asp.net-core

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

  

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

     

错误1:具有相同名称“Get”的属性路由必须具有相同的名称   template:Action:'Patrimonio.Controllers.CategoriaController.Getcc   (Patrimonio)' - 模板:'api / Categoria / {id}'动作:   'Patrimonio.Controllers.PatrimonioController.Getac(Patrimonio)' -   模板:'api / Patrimonio / {id}'   Microsoft.AspNetCore.Mvc.Internal.ControllerActionDescriptorBuilder.Build(应用模型   应用程序)

第一个控制器有

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

第二个有

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

即使使用 Getac Getcc ,ASP.Net Core也会抱怨同名“获取”。

如何解决这个问题?

1 个答案:

答案 0 :(得分:17)

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

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

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

尝试替换

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

[HttpGet("{id}")]