Я создал новый проект Web API из шаблонов Visual Studio, а затем следовал следующему руководству по добавлению OData в этот проект.https://devblogs.microsoft.com/odata/supercharging-asp-net-core-api-with-odata/
Вызов https://localhost:xxx/api/Assets и https://localhost:xxx/api/Assets/1
возвращает все активы, в то время как последний должен возвращать только 1 актив (где id = 1)
Мой код:
public class AssetsController : ControllerBase
{
private IAssetService _service;
private IMapper _mapper;
public AssetsController (IAssetService _service, IMapper mapper)
{
this._service = _service;
this._mapper = mapper;
}
[HttpGet]
[EnableQuery()]
public ActionResult<IEnumerable<Asset>> Get()
{
return this._service.GetAllAssets().ToList();
}
[HttpGet("{id}")]
[EnableQuery()]
public Asset Get(int id)
{
return _service.GetById(id);
}
}
Я отладил, чтобы убедиться, что функция Get(int id)
никогда не вызывается.
Я попытался определить свой маршрут явно так:
[HttpGet]
[Route("GetById/{id}")]
[EnableQuery()]
public Asset Get(int id)
{
return _service.GetById(id);
}
РЕДАКТИРОВАТЬ
Маршрутизация определена при запуске:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
/* snip */
app.UseMvc(routeBuilder =>
{
routeBuilder.MapRoute(
name: "default",
template: "{controller}/{action=Index}/{id?}");
routeBuilder.Select().Filter().OrderBy().Expand().Count().MaxTop(10);
routeBuilder.MapODataServiceRoute("api", "api", GetEdmModel());
});
}
Это не имеет значения.
Есть идеи?