我试图弄清楚如何从.Net Core 1.1中的用户类访问当前绝对Uri - 即当前正在呈现的视图的绝对URL
我找到了这个链接,但似乎已经过时并在出错后抛出错误:Getting absolute URLs using ASP.NET Core MVC 6
在我的Startup.cs中,我有 ConfigureServices :
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
在我的Startup.cs中,我在Configure:
下IHttpContextAccessor httpContextAccessor = app.ApplicationServices.GetRequiredService<IHttpContextAccessor>();
Extensions.Context.Configure(httpContextAccessor);
我有以下课程:
using Microsoft.AspNetCore.Http;
using System;
namespace Framework.Extensions
{
public static class Context
{
private static IHttpContextAccessor HttpContextAccessor;
public static void Configure(IHttpContextAccessor httpContextAccessor)
{
HttpContextAccessor = httpContextAccessor;
}
private static HttpContext GetCurrentContext()
{
return HttpContextAccessor.HttpContext;
}
public static HttpContext Current = GetCurrentContext();
private static Uri GetAbsoluteUri()
{
UriBuilder uriBuilder = new UriBuilder();
uriBuilder.Scheme = GetCurrentContext().Request.Scheme;
uriBuilder.Host = GetCurrentContext().Request.Host.ToString();
uriBuilder.Path = GetCurrentContext().Request.Path.ToString();
uriBuilder.Query = GetCurrentContext().Request.QueryString.ToString();
return uriBuilder.Uri;
}
public static Uri AbsoluteUri = GetAbsoluteUri();
public static string Url = GetAbsoluteUri().ToString();
public static string AbsolutePath = GetAbsoluteUri().AbsolutePath;
}
}
我得到以下异常:
System.TypeInitializationException未被用户代码
处理 HResult = -2146233036 Message =类型初始值设定项 &#39; Framework.Extensions.Context&#39;抛出异常。
TypeName = Framework.Extensions.Context InnerException: 的HResult = -2147467261 Message =对象引用未设置为对象的实例。 来源= WWW 堆栈跟踪: 在E:\ Websites \ Stage \ www \ Extensions \ Context.cs中的Framework.Extensions.Context.GetCurrentContext():第16行 在E:\ Websites \ Stage \ www \ Extensions \ Context.cs中的Framework.Extensions.Context..cctor():第18行 的InnerException:
答案 0 :(得分:18)
您可以使用GetDisplayUrl
扩展方法。
var url = httpContextAccessor.HttpContext?.Request?.GetDisplayUrl();
假设httpContextAccessor
是IHttpContextAccessor
的对象,它是通过DI注入的。
此扩展方法在Microsoft.AspNetCore.Http.Extensions
命名空间中定义。因此,您需要使用using语句将其包含在文件中。
using Microsoft.AspNetCore.Http.Extensions;
答案 1 :(得分:9)
您希望在IHttpContextAccessor
中配置或注入“{1}}”,以便稍后在请求的上下文中使用帮助程序时,您可以使用它来访问当前Startup
对象
您无法将上下文存储在静态字段中,因为该上下文仅在提供特定请求时才有意义。通常,您将把访问器保留在静态字段中,并在每次调用助手时使用它。
HttpContext
,您将获得这些空引用。写下你想要的东西很简单:
IHttpContextAccessor
还要记住一件事:
答案 2 :(得分:-2)
我在api上使用它
using Microsoft.AspnetCore.Http.Hoststring
var uri = Request.Host;