asp.net-core-mvc – 如何从任何ASP .Net Core类访问当前的绝对Uri?
|
我试图弄清楚如何从.Net Core 1.1中的用户类访问当前的绝对Uri – 即当前正在呈现的视图的绝对URL 我发现了这个链接,但它似乎已经过时并在错误后抛出错误:Getting absolute URLs using ASP.NET Core MVC 6 在我的Startup.cs中,我在ConfigureServices下: services.AddSingleton<IHttpContextAccessor,HttpContextAccessor>(); 在我的Startup.cs中我有配置: 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;
}
}
我得到以下异常:
解决方法您希望在启动时“配置或注入”IHttpContextAccessor,以便稍后在请求的上下文中使用帮助程序时,可以使用它来访问当前的HttpContext对象.您无法将上下文存储在静态字段中,因为该上下文仅在提供特定请求时才有意义.通常,您将把访问器保留在静态字段中,并在每次调用助手时使用它. >更糟糕的是,您使用带有初始化程序的静态字段,这些字段在第一次使用该类时执行.这意味着它们在您调用Configure方法之前执行,因此将不会配置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() { }
}
还有一件事要记住: >在最初的问题中,帮助程序是作为静态类创建的,因为它们是作为扩展方法创建的.如果您不使用扩展方法,则不必强制使用静态类. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net – ReportViewer – 隐藏PDF导出
- asp.net-mvc – 模型需要注入依赖项时的模型(ViewModel)绑定
- asp.net-mvc – razor要求;在做什么时使用(Html.BeginForm(
- asp.net-mvc – mvc视图中的动态类型
- 当使用SignalR和传输模式长轮询时,Asp.net会话永不过期
- asp.net-mvc – 在没有EF的情况下在appsettings.json中获取
- asp.net-mvc – 无法加载文件或程序集System.Web.WebPages.
- asp.net-mvc-3 – ASP.Net MVC 3,Ninject和Quartz.Net – 如
- asp.net-mvc – 如何编写自定义的RegularExpressionValidat
- asp.net – EF是否在DbContext的不同实例之间缓存实体?
- 在asp.net MVC Javascript事件中没有命中断点
- asp.net-mvc-5 – 如何使用asp.net身份更改当前用
- asp.net-mvc – ASP.NET MVC术语让我沮丧 – 为什
- asp.net-web-api – 如何在HttpReponseMessage上
- .net – MVC 4 Mocking HttpContext – 如何模拟
- asp.net – 如何在Repeater中为LinkButton做Asyn
- Asp.net – 尝试访问工作网页时出错
- 如何运行ASP.Net页面的客户端验证?
- asp.net-mvc – ASP MVC Razor视图扩展方法,如何
- asp.net – Application_error函数间歇性捕获“文
