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

相关推荐
brzhang11 分钟前
宝藏发现:Sim Studio,一款让AI工作流搭建变简单的开源利器
前端·后端·github
这里有鱼汤13 分钟前
出大事了!0.1 + 0.2 居然不等于 0.3,Python我再也不敢用了…
后端·python
学了就忘23 分钟前
Axios 传参与 Spring Boot 接收参数完全指南
java·spring boot·后端·vue
这里有鱼汤27 分钟前
我用Python做了个“灵犀剪贴”:可以自动记录复制的文本,然后保存到本地
后端·python
冼紫菜33 分钟前
[特殊字符] SpringCloud项目中使用OpenFeign进行微服务远程调用详解(含连接池与日志配置)
java·后端·spring cloud
风象南1 小时前
SpringBoot中4种登录验证码实现方案
java·spring boot·后端
why15110 小时前
腾讯(QQ浏览器)后端开发
开发语言·后端·golang
浪裡遊10 小时前
跨域问题(Cross-Origin Problem)
linux·前端·vue.js·后端·https·sprint
声声codeGrandMaster10 小时前
django之优化分页功能(利用参数共存及封装来实现)
数据库·后端·python·django
code_shenbing10 小时前
WPF高级用法示例
c#·wpf·wpf高级