在Controller外部使用LinkGenerator

时间:2019-01-21 23:55:41

标签: c# asp.net-core asp.net-core-2.2

在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 });

但是,我收到一条消息,说我需要更多参数。为什么?

在Controller外部使用LinkGenerator的正确方法是什么?

1 个答案:

答案 0 :(得分:2)

如果未使用需要HttpContext的{​​{3}}重载,则必须提供 all 另一个参数的必需参数

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)

GetUriByAction

在您的示例中,将是schemehost

作为替代方案,您还可以考虑注入IHttpContextAccessor,以便您可以在控制器外部访问HttpContext,并且能够像从控制器内部调用时一样进行呼叫。

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