Использование LinkGenerator вне контроллера - PullRequest
0 голосов
/ 22 января 2019

На контроллере ASP.NET Core 2.2 у меня есть следующее:

var url = _linkGenerator.GetUriByAction(HttpContext, action: "GetContentByFileId", values: new { FileId = 1 });

Я ввел LinkGenerator в контроллер ...

Теперь мне нужно сгенерировать URL-адрес в классе, которыйэто не контроллер, поэтому я попытался:

var url = _linkGenerator.GetUriByAction(action: "GetContentByFileId", controller: "FileController", values: new { FileId = 1 });

Однако я получаю сообщение о том, что мне нужно больше аргументов.Почему?

Как правильно использовать LinkGenerator вне контроллера?

1 Ответ

0 голосов
/ 22 января 2019

Если вы не используете перегрузку GetUriByAction, для которой требуется HttpContext, то вам необходимо предоставить все необходимые аргументы других

public static string GetUriByAction(
        this LinkGenerator generator,
        string action,
        string controller,
        object values,
        string scheme,
        HostString host,
        PathString pathBase = default,
        FragmentString fragment = default,
        LinkOptions options = default)

Источник

Который в вашем примере будет scheme и host.

В качестве альтернативы вы также можете рассмотреть возможность введения IHttpContextAccessor, чтобы у вас был доступ к HttpContext за пределами контроллера, и вы сможете совершать вызов так же, как вы это делали, когда вызывались из контроллера.

var url = _linkGenerator.GetUriByAction(_accessor.HttpContext, 
    action: "GetContentByFileId", 
    values: new { FileId = 1 }
);
...