我用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)
即使使用Getac和Getcc,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)
| 归档时间: |
|
| 查看次数: |
8765 次 |
| 最近记录: |