懒得勤快 7 years ago
parent
commit
dd11a1546c

+ 22 - 0
Masuit.Tools.Core/Net/HttpContext2.cs

@@ -0,0 +1,22 @@
+using Microsoft.AspNetCore.Http;
+
+namespace Masuit.Tools.Core.Net
+{
+    /// <summary>
+    /// 实现类似于.NET Framework中的HttpContext静态对象,使用前需要在Startup中注入,ConfigureServices方法中:services.AddHttpContextAccessor();,Configure方法中:app.UseStaticHttpContext();
+    /// </summary>
+    public static class HttpContext2
+    {
+        private static IHttpContextAccessor _accessor;
+
+        /// <summary>
+        /// 获取当前禽求上下文
+        /// </summary>
+        public static HttpContext Current => _accessor.HttpContext;
+
+        internal static void Configure(IHttpContextAccessor accessor)
+        {
+            _accessor = accessor;
+        }
+    }
+}

+ 33 - 0
Masuit.Tools.Core/Net/StaticHttpContextExtensions.cs

@@ -0,0 +1,33 @@
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Http;
+using Microsoft.Extensions.DependencyInjection;
+
+namespace Masuit.Tools.Core.Net
+{
+    /// <summary>
+    /// 实现类似于.NET Framework的HttpContext静态对象的中间件对象
+    /// </summary>
+    public static class StaticHttpContextExtensions
+    {
+        /// <summary>
+        /// 注入HttpContext静态对象,方便在任意地方获取HttpContext,services.AddHttpContextAccessor();
+        /// </summary>
+        /// <param name="services"></param>
+        public static void AddHttpContextAccessor(this IServiceCollection services)
+        {
+            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
+        }
+
+        /// <summary>
+        /// 注入HttpContext静态对象,方便在任意地方获取HttpContext,app.UseStaticHttpContext();
+        /// </summary>
+        /// <param name="app"></param>
+        /// <returns></returns>
+        public static IApplicationBuilder UseStaticHttpContext(this IApplicationBuilder app)
+        {
+            var httpContextAccessor = app.ApplicationServices.GetRequiredService<IHttpContextAccessor>();
+            HttpContext2.Configure(httpContextAccessor);
+            return app;
+        }
+    }
+}