Asp.net core Asp.Net核心Api默认路由
我有一个非常基本的Asp.Net核心Api;我的控制器如下所示:Asp.net core Asp.Net核心Api默认路由,asp.net-core,routing,Asp.net Core,Routing,我有一个非常基本的Asp.Net核心Api;我的控制器如下所示: [ApiController] [Route("[controller]")] public class TestController : ControllerBase { [HttpGet("{id}")] public IEnumerable<Resource> Test(string id) { // Breakpoint here } 然而,事实并非如此。事实
[ApiController]
[Route("[controller]")]
public class TestController : ControllerBase
{
[HttpGet("{id}")]
public IEnumerable<Resource> Test(string id)
{
// Breakpoint here
}
然而,事实并非如此。事实上,以下URL确实:
https://localhost:5012/test/1
我的印象是URL的格式如下(从启动时开始):
因此,除非该操作是索引
:
https://localhost:5012/controller/action/id
但是,似乎接受的格式是:
https://localhost:5012/controller/id
我的问题是,为什么会这样?实际上是
ApiController
属性破坏了您的路由。看起来像是app.UseEndpoints
仅为MVC配置路由。因此,解决方案是删除所有属性以获得以下代码
public class TestController : ControllerBase
{
public string Test(string id)
{
return "OK";
}
}
或者,如果要保留ApiController
属性,还需要调整Route
值。如果在项目中不使用MVC,则可以删除app.UseEndpoints
[ApiController]
[Route("[controller]/[action]")]
public class TestController : ControllerBase
{
[HttpGet("{id}")]
public string Test(string id)
{
return "OK";
}
}
除了回答,
你可以改变这个
[HttpGet("{id}")]
public IEnumerable<Resource> Test(string id)
[HttpGet(“{id}”)]
公共IEnumerable测试(字符串id)
到
[HttpGet(“[action]/{id}”)]
公共IEnumerable测试(字符串id)
通过使用值“{id}”指定属性,可以覆盖默认行为。删除属性并使用“/test/test/1”我最初尝试过,但没有什么不同这是否回答了您的问题?
[ApiController]
[Route("[controller]/[action]")]
public class TestController : ControllerBase
{
[HttpGet("{id}")]
public string Test(string id)
{
return "OK";
}
}
[HttpGet("{id}")]
public IEnumerable<Resource> Test(string id)
[HttpGet("[action]/{id}")]
public IEnumerable<Resource> Test(string id)