我试图弄清楚如何从.Net Core 1.1中的用户类访问当前的绝对Uri - 即当前正在呈现的视图的绝对URL
我找到了这个链接,但它似乎已经过时并在出错后抛出错误:使用ASP.NET Core MVC 6获取绝对URL
在我的Startup.cs中,我在ConfigureServices下:
services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
Run Code Online (Sandbox Code Playgroud)
在我的Startup.cs中我有配置:
IHttpContextAccessor httpContextAccessor = app.ApplicationServices.GetRequiredService<IHttpContextAccessor>();
Extensions.Context.Configure(httpContextAccessor);
Run Code Online (Sandbox Code Playgroud)
我有以下课程:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我得到以下异常:
System.TypeInitializationException未被用户代码处理
HResult = -2146233036 Message ='Framework.Extensions.Context'的类型初始值设定项引发异常.
TypeName = Framework.Extensions.Context InnerException:HResult = -2147467261 Message =对象引用未设置为对象的实例.Source = www StackTrace:位于E:\ Websites\Stage\www\Extensions\Context.cs中的Framework.Extensions.Context.GetCurrentContext():E:\ Websites \中Framework.Extensions.Context..cctor()的第16行Stage\www\Extensions\Context.cs:第18行InnerException:
Shy*_*yju 20
您可以使用GetDisplayUrl扩展方法.
var url = httpContextAccessor.HttpContext?.Request?.GetDisplayUrl();
Run Code Online (Sandbox Code Playgroud)
假设httpContextAccessor是IHttpContextAccessor通过DI注入的对象.
此扩展方法在Microsoft.AspNetCore.Http.Extensions命名空间中定义.因此,您需要使用using语句将其包含在文件中.
using Microsoft.AspNetCore.Http.Extensions;
Dan*_*.G. 15
你想要的IHttpContextAccessor"配置或注入"你Startup这样以后当你可以用它来访问当前请求的上下文中使用助手HttpContext对象.
您无法将上下文存储在静态字段中,因为该上下文仅在提供特定请求时才有意义.通常,您将把访问器保留在静态字段中,并在每次调用助手时使用它.
IHttpContextAccessor尚未配置,您将获得这些空引用.写下你想要的东西很简单:
public static class Context
{
private static IHttpContextAccessor HttpContextAccessor;
public static void Configure(IHttpContextAccessor httpContextAccessor)
{
HttpContextAccessor = httpContextAccessor;
}
private static Uri GetAbsoluteUri()
{
var request = HttpContextAccessor.HttpContext.Request;
UriBuilder uriBuilder = new UriBuilder();
uriBuilder.Scheme = request.Scheme;
uriBuilder.Host = request.Host.Host;
uriBuilder.Path = request.Path.ToString();
uriBuilder.Query = request.QueryString.ToString();
return uriBuilder.Uri;
}
// Similar methods for Url/AbsolutePath which internally call GetAbsoluteUri
public static string GetAbsoluteUrl() { }
public static string GetAbsolutePath() { }
}
Run Code Online (Sandbox Code Playgroud)
还有一件事要记住:
| 归档时间: |
|
| 查看次数: |
29213 次 |
| 最近记录: |