.Net Core/.Net6/.Net8 ,启动配置/Program.cs 配置

2024-04-04 05:12

本文主要是介绍.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 配置的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/874877

相关文章

Node.js net模块的使用示例

《Node.jsnet模块的使用示例》本文主要介绍了Node.jsnet模块的使用示例,net模块支持TCP通信,处理TCP连接和数据传输,具有一定的参考价值,感兴趣的可以了解一下... 目录简介引入 net 模块核心概念TCP (传输控制协议)Socket服务器TCP 服务器创建基本服务器服务器配置选项服

MySQL zip安装包配置教程

《MySQLzip安装包配置教程》这篇文章详细介绍了如何使用zip安装包在Windows11上安装MySQL8.0,包括下载、解压、配置环境变量、初始化数据库、安装服务以及更改密码等步骤,感兴趣的朋... 目录mysql zip安装包配置教程1、下载zip安装包:2、安装2.1 解压zip包到安装目录2.2

MySQL 中的服务器配置和状态详解(MySQL Server Configuration and Status)

《MySQL中的服务器配置和状态详解(MySQLServerConfigurationandStatus)》MySQL服务器配置和状态设置包括服务器选项、系统变量和状态变量三个方面,可以通过... 目录mysql 之服务器配置和状态1 MySQL 架构和性能优化1.1 服务器配置和状态1.1.1 服务器选项

Nginx启动失败:端口80被占用问题的解决方案

《Nginx启动失败:端口80被占用问题的解决方案》在Linux服务器上部署Nginx时,可能会遇到Nginx启动失败的情况,尤其是错误提示bind()to0.0.0.0:80failed,这种问题通... 目录引言问题描述问题分析解决方案1. 检查占用端口 80 的进程使用 netstat 命令使用 ss

Android里面的Service种类以及启动方式

《Android里面的Service种类以及启动方式》Android中的Service分为前台服务和后台服务,前台服务需要亮身份牌并显示通知,后台服务则有启动方式选择,包括startService和b... 目录一句话总结:一、Service 的两种类型:1. 前台服务(必须亮身份牌)2. 后台服务(偷偷干

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

springboot启动流程过程

《springboot启动流程过程》SpringBoot简化了Spring框架的使用,通过创建`SpringApplication`对象,判断应用类型并设置初始化器和监听器,在`run`方法中,读取配... 目录springboot启动流程springboot程序启动入口1.创建SpringApplicat