.Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
.Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
- 没有废话,直接上代码
- 调用
没有废话,直接上代码
/// <summary>/// 启动类/// </summary>public static class Mains{static IServiceCollection _services;static IMvcBuilder _mvc;public static WebApplicationBuilder Main(this WebApplicationBuilder builder,IMvcBuilder mvc=null){_services = builder.Services;_mvc = mvc;// 增加Http组件_services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();//在请求生命周期内,可以读取//web服务器信息,包括域名,客户端ip 等Web._service = _services;//读取appsetting.config内容 AppSettings.ConfigItems["xx"]/AppSettings.ConfigItems["a:b"]AppSettings.ConfigItems = builder.Configuration;//添加 cookie 静态类Cookies.serviceCollection = builder.Services;//自动批量注册服务AddService();//单独注册某个服务,特殊情况_services.AddSingleton<Ixxx,xxx>();//添加拦截器_services.AddControllersWithViews(x =>{//全局返回,统一返回格式x.Filters.Add<ResAttribute>();//全局日志,报错x.Filters.Add<LogAttribute>();//全局身份验证x.Filters.Add<TokenAttribute>();});//式化响应_services.AddControllers().AddJsonOptions(options =>{//时间格式化响应options.JsonSerializerOptions.Converters.Add(new JsonOptionsDate("yyyy-MM-dd HH:mm:ss"));//int格式化响应options.JsonSerializerOptions.Converters.Add(new JsonOptionsInt());//禁止字符串被转义成Unicodeoptions.JsonSerializerOptions.Encoder = JavaScriptEncoder.Create(UnicodeRanges.All);});//swagger 设置_services.AddSwaggerGen(c =>{//请求头参数输入框设置c.OperationFilter<OptionHeaderFilter>();//文档描述c.SwaggerDoc("v1", new OpenApiInfo{Title = "service",Version = "0.0.1",Description = "文档描述"});//添加接口和实体的注释var path = AppContext.BaseDirectory;//Path.GetDirectoryName(typeof(Program).Assembly.Location);var api = Path.Combine(path, "api.xml");c.IncludeXmlComments(api, true);c.OrderActionsBy(o => o.RelativePath);});//跨域设置//var WithOrigins = AppSettings.ConfigItems["WithOrigins"]?.Split(";");//域名白名单//允许跨域_services.AddCors(policy =>{/** 可以在控制器处添加* [EnableCors("CorsPolicy")]*/policy.AddPolicy("CorsPolicy", opt => opt.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod()//#if !DEBUG// .WithOrigins(WithOrigins)//域名白名单//#endif.WithExposedHeaders("X-Pagination"));});#region 请求大小设置builder.WebHost.UseKestrel(options =>{options.Limits.MaxRequestLineSize = int.MaxValue;//HTTP 请求行的最大允许大小。 默认为 8kboptions.Limits.MaxRequestBufferSize = int.MaxValue;//请求缓冲区的最大大小。 默认为 1M//任何请求正文的最大允许大小(以字节为单位),默认 30,000,000 字节,大约为 28.6MBoptions.Limits.MaxRequestBodySize = int.MaxValue;//限制请求长度});/* ↓↓↓↓↓↓↓ 使用iis/nginx ↓↓↓↓↓↓ */_services.Configure<FormOptions>(x =>{x.ValueCountLimit = 1000000; // 设置表单键值对的最大数量x.ValueLengthLimit = int.MaxValue;// 设置表单数据长度限制为int的最大值x.MultipartBodyLengthLimit = int.MaxValue; // 设置多部分正文的长度限制为int的最大值//x.MultipartHeadersCountLimit = 100; // 设置多部分表单头的最大数量//x.MultipartHeadersLengthLimit = 16384; // 设置多部分表单头的最大长度(bytes)});#endregionreturn builder;}/// <summary>/// 注册服务/// </summary>public static void AddService(){//加载插件dll,否则GetAllAssembly()读取不到,可以实现简单的插件化,只在启动时读取一次,后续不影响性能//这里也可以放到 GetAllAssembly 方法的开头// Mods 插件文件夹var mods_dll = Directory.GetFiles("Mods", "*.dll");foreach (var mod in mods_dll){Assembly.LoadFrom(mod);}var allAssembly = GetAllAssembly().Where(x => x.GetName().Name != "Microsoft.Data.SqlClient").ToList();//插件文件夹下面的dllvar mods = allAssembly.Where(x => x.Location.Contains("\\Mods")).ToList();foreach (var item in mods){// 添加插件的控制器,可以实现简单的插件化_mvc.AddApplicationPart(item);}#region 注入服务// 筛选继承了 ITransient 接口的类型var _transient = allAssembly.SelectMany(t => t.GetTypes()).Where(x => x.GetInterface("ITransient") != null).ToList();_transient.AddTransient();// 筛选继承了 IScoped 接口的类型var _scoped = allAssembly.SelectMany(t => t.GetTypes()).Where(x => x.GetInterface("IScoped") != null).ToList();_scoped.AddScoped();// 筛选继承了 ISingleton 接口的类型var _singleton = allAssembly.SelectMany(t => t.GetTypes()).Where(x => x.GetInterface("ISingleton") != null).ToList();_singleton.AddSingleton();#endregion}#region 注入服务方法/// <summary>/// 添加瞬时服务/// </summary>/// <param name="list"></param>public static void AddTransient(this List<Type> list){foreach (var item in list){_services.AddTransient(item);}}/// <summary>/// 添加请求范围服务/// </summary>/// <param name="list"></param>public static void AddScoped(this List<Type> list){foreach (var item in list){_services.AddScoped(item);}}/// <summary>/// 添加单列服务/// </summary>/// <param name="list"></param>public static void AddSingleton(this List<Type> list){foreach (var item in list){_services.AddSingleton(item);}}#endregion#region 注入服务方法/// <summary>/// 添加瞬时服务/// </summary>/// <param name="list"></param>public static void AddTransient(this List<Type> list){foreach (var item in list){_services.AddTransient(item);}}/// <summary>/// 添加请求范围服务/// </summary>/// <param name="list"></param>public static void AddScoped(this List<Type> list){foreach (var item in list){_services.AddScoped(item);}}/// <summary>/// 添加单列服务/// </summary>/// <param name="list"></param>public static void AddSingleton(this List<Type> list){foreach (var item in list){_services.AddSingleton(item);}}#endregion/// <summary>/// 获取全部 Assembly/// </summary>/// <returns></returns>private static List<Assembly> GetAllAssembly(){var allAssemblies = AppDomain.CurrentDomain.GetAssemblies().ToList();HashSet<string> loadedAssemblies = new();foreach (var item in allAssemblies){loadedAssemblies.Add(item.FullName!);}Queue<Assembly> assembliesToCheck = new();assembliesToCheck.Enqueue(Assembly.GetEntryAssembly()!);while (assembliesToCheck.Any()){var assemblyToCheck = assembliesToCheck.Dequeue();foreach (var reference in assemblyToCheck!.GetReferencedAssemblies()){if (!loadedAssemblies.Contains(reference.FullName)){try{var assembly = Assembly.Load(reference);assembliesToCheck.Enqueue(assembly);loadedAssemblies.Add(reference.FullName);allAssemblies.Add(assembly);}catch (Exception ex){Console.WriteLine(ex.Message);}}}}return allAssemblies;}/// <summary>/// app扩展/// </summary>/// <param name="app"></param>/// <returns></returns>public static WebApplication AppMain(this WebApplication app){//全局允许跨域app.UseCors("CorsPolicy");app.UseStaticFiles();return app;}}
调用
相关文章:

.Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置
.Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置 没有废话,直接上代码调用 没有废话,直接上代码 /// <summary>/// 启动类/// </summary>public static class Mains{static IServiceCollection _services;static IMvcBuilder _…...

尚硅谷2024最新Git企业实战教程 | Git与GitLab的企业实战
这篇博客是尚硅谷2024最新Git企业实战教程,全方位学习git与gitlab的完整笔记。 这不仅仅是一套Git的入门教程,更是全方位的极狐GitLab企业任务流开发实战!作为一应俱全的一站式DevOps平台,极狐GitLab的高阶功能全面覆盖࿰…...

2024阿里云老用户服务器优惠价格99元和199元
阿里云服务器租用价格表2024年最新,云服务器ECS经济型e实例2核2G、3M固定带宽99元一年,轻量应用服务器2核2G3M带宽轻量服务器一年61元,ECS u1服务器2核4G5M固定带宽199元一年,2核4G4M带宽轻量服务器一年165元12个月,2核…...
【前端webpack5高级优化】提升打包构建速度几种优化方案
HotModuleReplacement(HMR/热模块替换) 开发时我们修改了其中一个模块代码,Webpack 默认会将所有模块全部重新打包编译,速度很慢 所以我们需要做到修改某个模块代码,就只有这个模块代码需要重新打包编译,…...

【第十一届大唐杯全国大学生新一代信息通信技术大赛】赛题分析
赛道一 一等奖 7% 二等奖 15% 三等奖 25% 赛道二 参考文档: 《第十一届大唐杯全国大学生新一代信息通信技术大赛(产教融合5G创新应用设计)专项赛说明.pdf》 一等奖:7% 二等奖:10% 三等奖:20% 赛项一&am…...
Java面试题:Java集合框架:请简述Java集合框架的主要组成部分,并解释它们之间的关系。
Java集合框架(Java Collections Framework)是一组用来表示和操作集合的类的集合,它提供了用于存储不同类型对象的标准化接口和类。Java集合框架的主要组成部分包括以下几个部分: 集合接口(Collection Interface&#…...
hadoop3.0高可用分布式集群安装
hadoop高可用,依赖于zookeeper。 用于生产环境, 企业部署必须的模式. 1. 部署环境规划 1.1. 虚拟机及hadoop角色划分 主机名称 namenode datanode resourcemanager nodemanager zkfc journalnode zookeeper master slave1 slave2 1.2. 软件版本 java …...
Flink SQL系列之:解析Debezium数据格式时间字段常用的函数
Flink SQL系列之:解析Debezium数据格式时间字段常用的函数 一、FROM_UNIXTIME二、DATE_FORMAT三、TO_DATE四、CAST五、TO_TIMESTAMP_LTZ六、CONVERT_TZ七、FROM_UNIXTIME八、TO_TIMESTAMP九、常见用法案例1.案例一2.案例二3.案例三4.案例四5.案例五...

Redis底层数据结构-Dict
1. Dict基本结构 Redis的键与值的映射关系是通过Dict来实现的。 Dict是由三部分组成,分别是哈希表(DictHashTable),哈希节点(DictEntry),字典(Dict) 哈希表结构如下图所…...

Python基于深度学习的人脸识别项目源码+演示视频,利用OpenCV进行人脸检测与识别 preview
一、原理介绍 该人脸识别实例是一个基于深度学习和计算机视觉技术的应用,主要利用OpenCV和Python作为开发工具。系统采用了一系列算法和技术,其中包括以下几个关键步骤: 图像预处理:首先,对输入图像进行预处理&am…...

CTF下加载CTFtraining题库以管理员身份导入 [HCTF 2018]WarmUp,之后以参赛者身份完成解题全过程
-------------------搭建CTFd------------------------------ 给大家介绍一个本地搭建比较好用的CTF比赛平台:CTFD。 CTFd是一个Capture The Flag框架,侧重于易用性和可定制性。它提供了运行CTF所需的一切,并且可以使用插件和主题轻松进行自…...

机器学习每周挑战——信用卡申请用户数据分析
数据集的截图 # 字段 说明 # Ind_ID 客户ID # Gender 性别信息 # Car_owner 是否有车 # Propert_owner 是否有房产 # Children 子女数量 # Annual_income 年收入 # Type_Income 收入类型 # Education 教育程度 # Marital_status 婚姻状况 # Housing_type 居住…...

Vulnhub:WESTWILD: 1.1
目录 信息收集 arp nmap nikto whatweb WEB web信息收集 dirmap enm4ulinux sumbclient get flag1 ssh登录 提权 横向移动 get root 信息收集 arp ┌──(root㉿ru)-[~/kali/vulnhub] └─# arp-scan -l Interface: eth0, type: EN10MB, MAC: 0…...

[C#]winform使用OpenCvSharp实现透视变换功能支持自定义选位置和删除位置
【透视变换基本原理】 OpenCvSharp 是一个.NET环境下对OpenCV原生库的封装,它提供了大量的计算机视觉和图像处理的功能。要使用OpenCvSharp实现透视变换(Perspective Transformation),你首先需要理解透视变换的原理和它在图像处理…...

C++——list类及其模拟实现
前言:这篇文章我们继续进行C容器类的分享——list,也就是数据结构中的链表,而且是带头双向循环链表。 一.基本框架 namespace Mylist {template<class T>//定义节点struct ListNode{ListNode<T>* _next;ListNode<T>* _pre…...

https访问http的minio 图片展示不出来
问题描述:请求到的图片地址单独访问能显示,但是在网页中展示不出来 原因:https中直接访问http是不行的,需要用nginx再转发一下 nginx配置如下(注意:9000是minio默认端口,已经占用,…...
【Python整理】 Python知识点复习
1.Python中__init__()中声明变量必须都是self吗? 在Python中的类定义里,init() 方法是一个特殊的方法,称为类的构造器。在这个方法中,通常会初始化那些需要随着对象实例化而存在的实例变量。使用 self 是一种约定俗成的方式来引用实例本身。…...
汽车电子行业知识:UWB技术及应用
文章目录 1.什么是UWB技术1.1.UWB测距原理1.2.UWB数据传输原理2.汽车UWB技术应用2.1.UWB雷达2.1.1.信道的冲击响应CIR2.2.舱外检测目标2.3.舱内检测活体2.3.1.活体检测原理2.4.脚踢尾箱开门2.4.1.脚踢检测原理1.什么是UWB技术 UWB(ultra wideband)也叫超宽带技术,是一种使用…...
Claude-3全解析:图片问答,专业写作能力显著领先GPT-4
人工智能技术的飞速发展正在深刻改变着我们的工作和生活方式。作为一名资深的技术爱好者,我最近有幸体验了备受瞩目的AI助手Claude-3。这款由Anthropic公司推出的新一代智能工具展现出了非凡的实力,尤其在图像识别和专业写作领域的表现更是让人眼前一亮&…...
Mac 如何彻底卸载Python 环境?
第一步:首先去应用程序文件夹中,删除关于Python的所有文件; 第二步:打开terminal终端,输入下面命令查看versions下有哪些python版本; ls /library/frameworks/python.framework/versions第三步࿱…...
浏览器访问 AWS ECS 上部署的 Docker 容器(监听 80 端口)
✅ 一、ECS 服务配置 Dockerfile 确保监听 80 端口 EXPOSE 80 CMD ["nginx", "-g", "daemon off;"]或 EXPOSE 80 CMD ["python3", "-m", "http.server", "80"]任务定义(Task Definition&…...

MPNet:旋转机械轻量化故障诊断模型详解python代码复现
目录 一、问题背景与挑战 二、MPNet核心架构 2.1 多分支特征融合模块(MBFM) 2.2 残差注意力金字塔模块(RAPM) 2.2.1 空间金字塔注意力(SPA) 2.2.2 金字塔残差块(PRBlock) 2.3 分类器设计 三、关键技术突破 3.1 多尺度特征融合 3.2 轻量化设计策略 3.3 抗噪声…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...
python报错No module named ‘tensorflow.keras‘
是由于不同版本的tensorflow下的keras所在的路径不同,结合所安装的tensorflow的目录结构修改from语句即可。 原语句: from tensorflow.keras.layers import Conv1D, MaxPooling1D, LSTM, Dense 修改后: from tensorflow.python.keras.lay…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...

推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材)
推荐 github 项目:GeminiImageApp(图片生成方向,可以做一定的素材) 这个项目能干嘛? 使用 gemini 2.0 的 api 和 google 其他的 api 来做衍生处理 简化和优化了文生图和图生图的行为(我的最主要) 并且有一些目标检测和切割(我用不到) 视频和 imagefx 因为没 a…...
Web中间件--tomcat学习
Web中间件–tomcat Java虚拟机详解 什么是JAVA虚拟机 Java虚拟机是一个抽象的计算机,它可以执行Java字节码。Java虚拟机是Java平台的一部分,Java平台由Java语言、Java API和Java虚拟机组成。Java虚拟机的主要作用是将Java字节码转换为机器代码&#x…...