如何在视图之外使用ASP.NET Core生成完整的URL?

时间:2019-06-11 20:24:51

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

我有一个写在ASP.NET Core 2.2框架顶部的应用程序。我需要创建需要完整URL的JSON-Ld数据。我要转换为JSON-Ld的对象是使用服务类生成的。在我的服务类中,我希望能够创建完整的URL。

在将LinkGenerator类注入服务类的构造后,我尝试使用UrlHelper类创建URL。但是,LinkGenerator会生成相关的URI,而不是标准URL(不包括域)。

我还尝试创建IHttpContextAccessor的实例,希望可以使用它来生成完全限定的URL。将https://github.com/aspnet/Identity/blob/feedcb5c53444f716ef5121d3add56e11c7b71e5/src/Identity/IdentityServiceCollectionExtensions.cs#L79注入服务承包商后,我试图像这样创建UrlHelper的实例

var httpContextBase = new HttpContextWrapper(HttpContextAccessor.HttpContext);
var urlHelper = new UrlHelper(httpContextBase);

但是,new UrlHelper(httpContextBase)引发以下异常

  

System.NullReferenceException:'对象引用未设置为对象的实例。'

如何从服务类中正确生成完全限定的URL?

1 个答案:

答案 0 :(得分:2)

我找到了一种使用LinkGenerator

的方法

我在服务类的构造函数中注入了IHttpContextAccessorLinkGenerator。然后像这样

生成了完整的URI。
var url = LinkGenerator.GetUriByAction("index", "home", null, HttpContextAccessor.HttpContext.Request.Scheme, HttpContextAccessor.HttpContext.Request.Host);