Я пытаюсь создать ссылку на конечную точку API изнутри Сервиса - вне Контроллера.
Вот Контроллер и его базовый класс.Я использую управление версиями API и области в ASP.NET Core.
[ApiController]
[Area("api")]
[Route("[area]/[controller]")]
public abstract class APIControllerBase : ControllerBase
{
}
[ApiVersion("1.0")]
public class WidgetsController : APIControllerBase
{
[HttpGet("{id}"]
[Produces("application/json")]
[ProducesResponseType(StatusCodes.Status200OK)]
[ProducesResponseType(StatusCodes.Status404NotFound)]
public async Task<ActionResult<Widget>> Get(Guid id)
{
// Action...
}
}
Настройка управления версиями API:
services.AddApiVersioning(options =>
{
options.ApiVersionReader = ApiVersionReader.Combine(
new QueryStringApiVersionReader
{
ParameterNames = { "api-version", "apiVersion" }
},
new HeaderApiVersionReader
{
HeaderNames = { "api-version", "apiVersion" }
});
});
И где я на самом деле пытаюсь использовать LinkGenerator:
_linkGenerator.GetPathByAction(
_accessor.HttpContext,
action: "Get",
controller: "Widgets",
values: new
{
id = widget.Id,
apiVersion = "1.0"
}
)
Я испробовал все варианты вариаций для LinkGenerator.Я использовал перегрузку HttpContext, я использовал перегрузку без нее, я включил параметр apiVersion и пропустил его, я полностью удалил [ApiVersion]
из контроллера.Все всегда возвращается null
.Если я направлюсь к обычному контроллеру MVC, например GetPathByAction("Index", "Home")
, я получу URL, как и должен, поэтому я думаю, что он должен быть связан с моими областями API или настройкой версий.