.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

相关文章

无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案

《无法启动此程序因为计算机丢失api-ms-win-core-path-l1-1-0.dll修复方案》:本文主要介绍了无法启动此程序,详细内容请阅读本文,希望能对你有所帮助... 在计算机使用过程中,我们经常会遇到一些错误提示,其中之一就是"api-ms-win-core-path-l1-1-0.dll丢失

NGINX 配置内网访问的实现步骤

《NGINX配置内网访问的实现步骤》本文主要介绍了NGINX配置内网访问的实现步骤,Nginx的geo模块限制域名访问权限,仅允许内网/办公室IP访问,具有一定的参考价值,感兴趣的可以了解一下... 目录需求1. geo 模块配置2. 访问控制判断3. 错误页面配置4. 一个完整的配置参考文档需求我们有一

Vue 2 项目中配置 Tailwind CSS 和 Font Awesome 的最佳实践举例

《Vue2项目中配置TailwindCSS和FontAwesome的最佳实践举例》:本文主要介绍Vue2项目中配置TailwindCSS和FontAwesome的最... 目录vue 2 项目中配置 Tailwind css 和 Font Awesome 的最佳实践一、Tailwind CSS 配置1. 安

SpringBoot中HTTP连接池的配置与优化

《SpringBoot中HTTP连接池的配置与优化》这篇文章主要为大家详细介绍了SpringBoot中HTTP连接池的配置与优化的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录一、HTTP连接池的核心价值二、Spring Boot集成方案方案1:Apache HttpCl

Maven 插件配置分层架构深度解析

《Maven插件配置分层架构深度解析》:本文主要介绍Maven插件配置分层架构深度解析,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录Maven 插件配置分层架构深度解析引言:当构建逻辑遇上复杂配置第一章 Maven插件配置的三重境界1.1 插件配置的拓扑

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

VSCode中配置node.js的实现示例

《VSCode中配置node.js的实现示例》本文主要介绍了VSCode中配置node.js的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一.node.js下载安装教程二.配置npm三.配置环境变量四.VSCode配置五.心得一.no

Gradle在国内配置镜像加速的实现步骤

《Gradle在国内配置镜像加速的实现步骤》在国内使用Gradle构建项目时,最大的痛点就是依赖下载贼慢,甚至卡死,下面教你如何配置国内镜像加速Gradle下载依赖,主要是通过改写repositori... 目录引言一、修改 build.gradle 或 settings.gradle 的 reposito

使用easy connect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题

《使用easyconnect之后,maven无法使用,原来需要配置-Djava.net.preferIPv4Stack=true问题》:本文主要介绍使用easyconnect之后,maven无法... 目录使用easGWowCy connect之后,maven无法使用,原来需要配置-DJava.net.pr

史上最全nginx详细参数配置

《史上最全nginx详细参数配置》Nginx是一个轻量级高性能的HTTP和反向代理服务器,同时也是一个通用代理服务器(TCP/UDP/IMAP/POP3/SMTP),最初由俄罗斯人IgorSyso... 目录基本命令默认配置搭建站点根据文件类型设置过期时间禁止文件缓存防盗链静态文件压缩指定定错误页面跨域问题