【问题标题】:ASP.Net Core 2 multiple ControllersASP.Net Core 2 多个控制器
【发布时间】:2017-10-04 20:19:28
【问题描述】:

我用一个控制器创建了一个 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 申请)

第一个控制器有

 // 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;
 }

即使使用 GetacGetcc,ASP.Net Core 仍会抱怨同名“Get”。

如何解决?

【问题讨论】:

  • 有趣!这应该有效。你有其他一些你在其他地方使用的路由定义代码吗?
  • 我试过 app.UseMvc(); //app.UseMvcWithDefaultRoute();但似乎没有解决这个问题的效果。

标签: asp.net-core


【解决方案1】:

您的错误消息与您发布的代码不符。但是您的程序中似乎有两个 [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}")]

【讨论】:

  • 太棒了。你诊断准确。我没有发现 ASP.Net Core 抱怨的“Get”是在属性声明 Name="Get" 上。我认为这是方法的 Get 名称。
猜你喜欢
  • 2023-03-25
  • 2021-10-04
  • 2016-04-30
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多