我用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也会抱怨同名“获取”。
如何解决这个问题?
答案 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}")]