C# WebAPI核心路由问题
因此,我正在使用Web API(ASP.NET Core 2)并遇到路由问题 我有几个控制器,例如: 学校管理员C# WebAPI核心路由问题,c#,asp.net-core,.net-core,asp.net-core-webapi,asp.net-core-routing,C#,Asp.net Core,.net Core,Asp.net Core Webapi,Asp.net Core Routing,因此,我正在使用Web API(ASP.NET Core 2)并遇到路由问题 我有几个控制器,例如: 学校管理员 教师控制器 两者都有Get:Get(int-id) 问题是,当我运行它时,甚至在实际能够调用这些方法之前,我都会遇到运行时错误 具有相同名称“Get”的属性路由必须具有相同的模板: 操作:MyProject.WebAPI.Controllers.SchoolController.Get(MyProject.WebAPI)'-Template:'api/school/{id}' 操作:
教师控制器 两者都有Get:
Get(int-id)
问题是,当我运行它时,甚至在实际能够调用这些方法之前,我都会遇到运行时错误
具有相同名称“Get”的属性路由必须具有相同的模板:
操作:MyProject.WebAPI.Controllers.SchoolController.Get(MyProject.WebAPI)'-Template:'api/school/{id}'
操作:MyProject.WebAPI.Controllers.TeacherController.Get(MyProject.WebAPI)'-Template:'api/teacher/{id}'
当控制器应该有自己的GET等时,为什么会这样做。。。因此,您可以:
/api/{controller}/1
etc... ?
现在,我还有另一个Get方法,都在它们的控制器中,但具有不同的方法签名和不同的HttpGet名称,即:
// TeachersController:
[Produces("application/json")]
[Route("api/teacher")]
public class TeacherController : Controller
{
// GET: api/Teacher/5
[HttpGet("{id}", Name = "Get")]
public IActionResult Get(int id)
{
// BLAH
}
}
学校总监:
[Produces("application/json")]
[Route("api/school")]
public class SchoolController : Controller
{
[HttpGet("{id}", Name = "Get")]
public IActionResult Get(int id)
{
// BLAH
}
[HttpGet("SearchBasic")]
public IActionResult SearchBasic(string schoolName, string zipCode)
{
// BLAH
}
}
澄清一下,问题是:
- 为什么web应用一启动就出现运行时错误
- get在不同的控制器上,为什么会有冲突
名称执行操作。它们必须是唯一的,以便路由表能够区分它们
参考文献
路由名称可用于基于特定路由生成URL。路由名称对路由的URL匹配行为没有影响,仅用于URL生成路由名称必须在应用程序范围内唯一。
重点矿山
更新路由名称
[Route("api/teacher")]
public class TeacherController : Controller {
// GET: api/Teacher/5
[HttpGet("{id}", Name = "GetTeacher")]
public IActionResult Get(int id) {
//...
}
}
[Route("api/school")]
public class SchoolController : Controller
{
// GET: api/school/5
[HttpGet("{id}", Name = "GetSchool")]
public IActionResult Get(int id) {
//...
}
}
从两个控制器中删除get action的名称将解决问题对……您不能像在控制器中那样使用相同的名称进行操作。太好了。非常感谢。固定的!我想知道是否有两个不同的控制器类,为什么.NETCore不允许相同的操作名-Get()?Thanks@Cheung因为它们最终位于同一路由表中,所以名称必须是唯一的。即使是在另一个控制器中,我在使用dotnet aspnet codegenerator脚手架时也遇到了这个问题。生成的代码向HttpGet添加Name属性。删除Name属性解决了这个问题。但是Name对于在CreatedAtRoute(nameof(GetTeacherAsync),new{},res)响应中使用很有用