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