当前位置: 首页 > news >正文

.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;}}

调用

在这里插入图片描述

在这里插入图片描述

http://www.lryc.cn/news/331284.html

相关文章:

  • 尚硅谷2024最新Git企业实战教程 | Git与GitLab的企业实战
  • 2024阿里云老用户服务器优惠价格99元和199元
  • 【前端webpack5高级优化】提升打包构建速度几种优化方案
  • 【第十一届大唐杯全国大学生新一代信息通信技术大赛】赛题分析
  • Java面试题:Java集合框架:请简述Java集合框架的主要组成部分,并解释它们之间的关系。
  • hadoop3.0高可用分布式集群安装
  • Flink SQL系列之:解析Debezium数据格式时间字段常用的函数
  • Redis底层数据结构-Dict
  • Python基于深度学习的人脸识别项目源码+演示视频,利用OpenCV进行人脸检测与识别 preview
  • CTF下加载CTFtraining题库以管理员身份导入 [HCTF 2018]WarmUp,之后以参赛者身份完成解题全过程
  • 机器学习每周挑战——信用卡申请用户数据分析
  • Vulnhub:WESTWILD: 1.1
  • [C#]winform使用OpenCvSharp实现透视变换功能支持自定义选位置和删除位置
  • C++——list类及其模拟实现
  • https访问http的minio 图片展示不出来
  • 【Python整理】 Python知识点复习
  • 汽车电子行业知识:UWB技术及应用
  • Claude-3全解析:图片问答,专业写作能力显著领先GPT-4
  • Mac 如何彻底卸载Python 环境?
  • Vue 大文件切片上传实现指南包会,含【并发上传切片,断点续传,服务器合并切片,计算文件MD5,上传进度显示,秒传】等功能
  • 【VUE+ElementUI】el-table表格固定列el-table__fixed导致滚动条无法拖动
  • 重置gitlab root密码
  • v-text 和v-html
  • 学习笔记——C语言基本概念结构体共用体枚举——(10)
  • VMware虚拟机三种网络模式
  • Ai音乐大师演示(支持H5、小程序)独立部署源码
  • Windows下Docker搭建Flink集群
  • VGA显示器驱动设计与验证
  • jupyter notebook 配置默认文件路径
  • 强大缓存清理工具 NetShred X for Mac激活版