ASP.NET 2.0 Web API 有 2 个参数问题

ASP.NET 2.0 Web API with 2 parameters problem

我写了下面的代码来得到一个接受两个参数的网站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核心路由时,有几个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(...)] 属性。