asp.net core在其他程序集获取HttpContext

首先在Program.cs中,注册

csharp 复制代码
builder.Services.AddHttpContextAccessor();

Program.cs完整代码:

csharp 复制代码
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.CodeAnalysis.CSharp.Syntax;
using System.Text.Encodings.Web;
using System.Text.Unicode;
using WebReportInfoNetCore7;
using WebReportInfoNetCore7.DataBaseEntity;
using WebReportInfoNetCore7.IBLL;
using WebReportInfoNetCore7.IBLL_impl;
using WebReportInfoNetCore7.IDAO;
using WebReportInfoNetCore7.IDAO_impl;

var builder = WebApplication.CreateBuilder(args);

//依赖注入
builder.Services.AddSingleton<IAh_userDao, Ah_userDao>();
builder.Services.AddSingleton<IUserBll, UserBll>();


// Add services to the container.
builder.Services.AddControllersWithViews(ops => {
    //全局异常过滤器,注册
    ops.Filters.Add<ExceptionFilter>();
})

//Microsoft.AspNetCore.Mvc.NewtonsoftJson
.AddNewtonsoftJson(options =>
{
    options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver();
});

 
builder.Services.AddSession();

//IHttpContextAccessor 在其他程序集中获取HttpContext
builder.Services.AddHttpContextAccessor();

//解决输入页面中文被编码了
builder.Services.AddSingleton(HtmlEncoder.Create(UnicodeRanges.All));

var app = builder.Build();

 
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();

app.UseRouting();

app.UseAuthorization();
app.UseSession();

app.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");

AppServicesHelpter.App = app;


//Microsoft.AspNetCore.Session.ISessionStore
//IHttpContextAccessor Accessor = app.Services.GetService<IHttpContextAccessor>();

app.Run();

其他程序集中获取,其他程序集需要引用文件:Microsoft.AspNetCore.Http.Abstractions.dll

文件位置:

C:\Program Files\dotnet\packs\Microsoft.AspNetCore.App.Ref\7.0.5\ref\net7.0

csharp 复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Http;
using WebReportInfoNetCore7.ViewEntity;
using System.Net.Http;
using System.Runtime.CompilerServices;

namespace WebReportInfoNetCore7.DataBaseEntity
{
    /// <summary>
    /// 依赖注册,获取接口实例
    /// </summary>
    /// 创建时间:2023-10-8 16:03:39 
    public sealed class AppServicesHelpter
    {
        /// <summary>
        /// 程序
        /// </summary>
        public static Microsoft.AspNetCore.Builder.WebApplication App { get; set; }

        /// <summary>
        /// 获取接口实例
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <returns></returns>
        public static T GetServices<T>() where T : notnull
        {
            T instance = App.Services.GetRequiredService<T>();
            return instance;
        }

        /// <summary>
        /// 获取当前登录用户
        /// </summary>
        /// <returns></returns>
        /// 创建时间:2023-10-10 14:48:23, 
        public static Ah_userView CurrentLoginUser()
        {
            Microsoft.AspNetCore.Http.IHttpContextAccessor accessor = App.Services.GetService<Microsoft.AspNetCore.Http.IHttpContextAccessor>();
            string json = accessor.HttpContext.Session.GetString("userLogin");
            return Newtonsoft.Json.JsonConvert.DeserializeObject<Ah_userView>(json);
        }

    }
}

微软文档:
https://learn.microsoft.com/zh-cn/aspnet/core/fundamentals/http-context?view=aspnetcore-7.0

相关推荐
索迪迈科技25 分钟前
记一次 .NET 某中医药附属医院门诊系统 崩溃分析
windows·c#·.net·windbg
SunflowerCoder30 分钟前
WPF迁移avalonia之触发器
c#·wpf·avalonia
Java水解33 分钟前
MySQL UPDATE 语句:数据更新操作详解
后端·mysql
Java水解40 分钟前
深入浅出:在 Koa 中实现优雅的中间件依赖注入
后端·koa
lssjzmn1 小时前
构建实时消息应用:Spring Boot + Vue 与 WebSocket 的有机融合
java·后端·架构
金銀銅鐵1 小时前
[Java] 浅析可重复注解(Repeatable Annotation) 是如何实现的
java·后端
用户8174413427481 小时前
Kubernetes集群核心概念 Service
后端
掘金一周1 小时前
凌晨零点,一个TODO,差点把我们整个部门抬走 | 掘金一周 9.11
前端·人工智能·后端
yeyong1 小时前
日志告警探讨,我问deepseek答,关于elastalert
后端
Cyan_RA91 小时前
SpringMVC 执行流程分析 详解(图解SpringMVC执行流程)
java·人工智能·后端·spring·mvc·ssm·springmvc