在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的正确方法是什么?
答案 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)
在您的示例中,将是scheme
和host
。
作为替代方案,您还可以考虑注入IHttpContextAccessor
,以便您可以在控制器外部访问HttpContext
,并且能够像从控制器内部调用时一样进行呼叫。
var url = _linkGenerator.GetUriByAction(_accessor.HttpContext,
action: "GetContentByFileId",
values: new { FileId = 1 }
);