asp.net-core-mvc – 如何从任何ASP .Net Core类访问当前的绝对U
我试图弄清楚如何从.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-mvc – ASP.NET MVC:如何使用模型呈现不同的操作(
- Asp.net和windows身份验证
- asp.net-mvc – asp.net mvc – 需要存储当前请求的一些数据
- asp.net – 如何为.Net网站,Windows服务等创建安装程序?
- ASP.NET中XML转JSON的方法实例
- ASP.Net Core Web Api中的异步视频流不起作用
- 何时使用ASP.NET MVC与ASP.NET Web窗体?
- asp.net-mvc – 具有多个应用程序的ASP.NET标识
- asp.net-mvc-4 – TempData不适用于MVC4中的第二个请求
- asp.net-mvc – Sitecore和ASP.net MVC
- asp.net-core – 通过JWT Token授权
- asp.net – 自定义主体在新请求时恢复为GenericP
- asp.net-mvc – 在ASP.NET MVC中创建ETag过滤器
- .net – 在MVC应用程序之间共享视图,逻辑等
- asp.net – 关于webcal URI方案的ics文件
- asp.net-mvc-3 – 使用javascript代码访问viewba
- asp.net – 当modal设置为TRUE时,jQuery UI对话框
- asp.net-mvc – 如何在ASP.NET MVC控制器中访问H
- asp.net-mvc – 为什么我不能在ASP.NET视图中设置
- 清除ASP.net窗体中的所有字段