我写了下面的代码来获得一个接受两个参数的 web api:
[Route("api/[controller]")]
[ApiController]
public class EventsController : ControllerBase
{
// GET: api/events/5
[Route("api/[controller]/{deviceId}/{action}")]
[HttpGet("{deviceId}/{action}")]
public IEnumerable<CosmosDBEvents> Get(string deviceId,string action)
{
try
{
return null;
}
catch(Exception ex)
{
throw (ex);
}
}
}
我尝试使用以下 url 调用它:
https://localhost:44340/api/events/abcde/indice
但它不起作用。错误是 404 ,找不到页面。
我还更改了代码,如下所示,但没有任何变化:
[Route("~/api/events/{deviceId}/{action}")]
[HttpGet("{deviceId}/{action}")]
public IEnumerable<CosmosDBEvents> Get(string deviceId,string action)
{
try
{
return null;
}
catch(Exception ex)
{
throw (ex);
}
}
我做错了什么?
最佳答案
使用ASP.NET Core路由时,有几个Reserved routing names .这是列表:
- action
- area
- controller
- handler
- page
如您所见,action
在列表中,这意味着您不能将其用于您自己的目的。如果您将 action
更改为不在列表中的其他内容,它将起作用:
[Route("api/[controller]")]
[ApiController]
public class EventsController : ControllerBase
{
[HttpGet("{deviceId}/{deviceAction}")]
public IEnumerable<CosmosDBEvents> Get(string deviceId, string deviceAction)
{
// ...
}
}
请注意,我还从 Get
中删除了 [Route(...)]
属性,由于您使用了 [ HttpGet(...)]
还指定路由的属性。
关于c# - 具有 2 个参数问题的 ASP.NET 2.0 Web API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57217516/