Не удается заставить LinkGenerator создать путь к действию API - PullRequest
0 голосов
/ 06 марта 2019

Я пытаюсь создать ссылку на конечную точку 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 или настройкой версий.

1 Ответ

1 голос
/ 06 марта 2019

Вы не указываете область:

_linkGenerator.GetPathByAction(
    _accessor.HttpContext,
    action: "Get",
    controller: "Widgets",
    values: new
    {
        area = "api",
        id = widget.Id,
        apiVersion = "1.0"
    }
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...