【.Net】【C#】Program.cs通用代码模板

server/2024/10/25 6:05:47/

.Net】【C#】Web Core Api 通用代码模板

  • 常用NuGet
  • Program.cs
  • appsettings.json
  • log4net.config
  • VS2022 swagger文档配置

常用NuGet

Microsoft.Extensions.Logging.Log4Net.AspNetCore
Flurl
Flurl.Http

Program.cs

c#">using System.Reflection;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using Microsoft.OpenApi.Models;
using Newtonsoft.Json;
using Newtonsoft.Json.Serialization;
using Swashbuckle.AspNetCore.SwaggerUI;namespace model
{/// <summary>////// </summary>public class Program{public static void Main(string[] args){#region 自定义配置var builder = WebApplication.CreateBuilder(args);builder.Services.AddControllers().AddNewtonsoftJson(options =>{options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;options.SerializerSettings.ContractResolver = new DefaultContractResolver();//配置返回Json大小写格式与Model一致//options.SerializerSettings.ContractResolver = new DefaultContractResolver();//统一设置日期格式//options.SerializerSettings.DateFormatString = "yyyy-MM-dd";});builder.Services.AddControllers();//添加全局异常处理机制builder.Services.AddMvc(option =>{option.Filters.Add<ExceptionHandler>();});// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbucklebuilder.Services.AddEndpointsApiExplorer();builder.Services.AddSwaggerGen(options =>{options.SwaggerDoc("v1",new OpenApiInfo{Version = "v1",Title = AppSettingsHelper.GetSetting("AppName"),Description = $"API描述,v1版本",});var xmlFilename = $"{Assembly.GetExecutingAssembly().GetName().Name}.xml";//IncludeXmlComments 第二参数 true 则显示 控制器 注释options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, xmlFilename),true);#region 启用swagger验证功能options.AddSecurityDefinition("Authorization",new OpenApiSecurityScheme(){Description = "在下框中输入请求头中需要添加授权token:Authorization",Name = "Authorization",In = ParameterLocation.Header,Type = SecuritySchemeType.ApiKey,BearerFormat = "Authorization",Scheme = "Authorization",});options.AddSecurityRequirement(new OpenApiSecurityRequirement{{new OpenApiSecurityScheme{Reference = new OpenApiReference{Type = ReferenceType.SecurityScheme,Id = "Authorization",},},Array.Empty<string>()},});#endregion});//校验配置builder.Services.AddControllers().ConfigureApiBehaviorOptions(options =>{//options.SuppressConsumesConstraintForFormFileParameters = true;//options.SuppressInferBindingSourcesForParameters = true;options.SuppressModelStateInvalidFilter = true;options.SuppressMapClientErrors = true;options.ClientErrorMapping[StatusCodes.Status404NotFound].Link = "/error";});var app = builder.Build();app.UseSwagger();app.UseSwaggerUI(m => m.DocExpansion(DocExpansion.None));//app.UseHttpsRedirection();//跨域//app.UseCors("Cors");// 设置允许所有来源跨域app.UseCors(builder =>{builder.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod().SetPreflightMaxAge(TimeSpan.FromSeconds(2000000));});//app.UseAuthentication();//app.UseAuthorization();app.MapControllers();#region 配置中心刷新配置//new ConnStr();#endregionapp.Run();#endregion}}/// <summary>/// 异常拦截器/// </summary>public class ExceptionHandler : IExceptionFilter{/// <summary>/// 异常拦截器/// </summary>/// <param name="context"></param>public void OnException(ExceptionContext context){if (!context.ExceptionHandled) //如果异常没有被处理过{Exception ex = context.Exception;//Logger.Log(ex.ToString(), Level.ERROR);var request = context.HttpContext.Request;string url = request.Path + context.HttpContext.Request.QueryString;//var ParamPost = JsonConvert.SerializeObject(request.Method == "POST" ? request.Form : "");//Logger.Log($"url={url},param={ParamPost}");//全局错误返回//context.Result = new JsonResult(ResponseUtil.Error(ex.Message))//{//    StatusCode = (int)HttpStatusCode.OK//};Logger.Log($"url={url},ex.Message={ex.Message},ex.StackTrace={ex.StackTrace}",Level.ERROR);//全局错误返回context.Result = new OkObjectResult(ResponseModelInfo.SysError(ex.ToString()));context.ExceptionHandled = true;}}}
}

appsettings.json

{"AppName": "样例","Kestrel": {"Endpoints": {"Http": { "Url": "http://*:9000/" }}},"Logging": {"LogLevel": {"Default": "Information","Microsoft.AspNetCore": "Warning"}},"AllowedHosts": "*"
}

log4net.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration><log4net><appender name="RollingLogFileAppender"type="log4net.Appender.RollingFileAppender"><lockingModel type="log4net.Appender.FileAppender+MinimalLock"/><file value="logs\" /><datePattern value="'info-'yyyy-MM-dd'.log'"/><staticLogFileName value="false"/><appendToFile value="true"/><rollingStyle value="Composite"/><maxSizeRollBackups value="10"/><maximumFileSize value="30MB"/><layout type="log4net.Layout.PatternLayout"><conversionPatternvalue="%date [%thread][%-5level][%logger][%line] %message%newline"/></layout></appender><appender name="ConsoleAppender" type="log4net.Appender.ConsoleAppender"><layout type="log4net.Layout.PatternLayout"><conversionPattern value="%date [%thread][%-5level][%logger][%line] %message%newline" /></layout></appender><root><level value="INFO"/><appender-ref ref="RollingLogFileAppender"/><appender-ref ref="ConsoleAppender" /></root></log4net>
</configuration>

VS2022 swagger文档配置

图片


http://www.ppmy.cn/server/134624.html

相关文章

ref属性的作用对象类型

1.组件类型 如果作用对象是组件类型的话 那么该组件就是在当前组件中局部注册的组件 即子组件 通过this.$refs.refname就可以实现父组件访问子组件的需求 2.普通元素类型 当然除了满足父组件访问子组件以外 通过ref属性也可以作用于当前组件中的普通元素 并且通过this.$refs…

Python异步编程中的Producer-Consumer模式

Python异步编程中的Producer-Consumer模式 1. Producer-Consumer模式简介1.1 生产者&#xff08;Producer&#xff09;1.2 消费者&#xff08;Consumer&#xff09;1.3 队列&#xff08;Queue&#xff09; 2. 示例代码2.1 简单的Producer-Consumer示例2.2 多消费者示例2.3 带批…

【H2O2|全栈】JS入门知识(八)DOM(2)

目录 JS 前言 准备工作 排他操作 概念 案例 开关 概念 案例 自定义属性 设置属性 获取属性 移除属性 H5标准自定义属性格式规范 案例 节点 层级 父节点 子节点 兄弟节点 创建节点 添加节点 案例 结束语 JS 前言 本系列博客主要分享JavaScript的基础…

C++算法练习-day18——15.三数之和

题目来源&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 题目思路分析 题目描述&#xff1a; 给定一个包含 n 个整数的数组 nums&#xff0c;判断 nums 中是否存在三个元素 a&#xff0c;b&#xff0c;c &#xff0c;使得 a b c 0 &#xff1f;找出所有独特三元组…

Android 13 SPRD 如何临时修改 Android 系统版本

在 Android 开发或调试过程中,有时需要临时修改系统版本号,例如为了适应特定的应用需求或进行特定版本的兼容性测试。通过修改 Android 系统的构建文件,可以轻松实现这个目的。本文将介绍如何在 Android 源码中快速更改系统版本号。 步骤一:修改 sysprop.mk 首先,我们需…

C++ 虚函数问题理解[虚函数指针位于内存哪里]

虚函数是我们在C开发中最基本的多态中 常用的东西那么对于以下代码看看是否有哪些问题呢? class Base { public:virtual void foo() {printf("Base foo\n");} };void overwriteVtable() {Base obj;memset(&obj, 0, sizeof(obj)); obj.foo(); } 现在大家应该…

用Python将Office文档(Word、Excel、PowerPoint)批量转换为PDF

在处理不同格式的Office文档&#xff08;如Word、Excel和PowerPoint&#xff09;时&#xff0c;将其转换为PDF格式是常见的需求。这种转换不仅确保了文件在不同设备和操作系统间的一致性显示&#xff0c;而且有助于保护原始内容不被轻易修改&#xff0c;非常适合于正式报告、提…

初识jsp

学习本章节前建议先安装Tomcat web服务器&#xff1a;tomcat下载安装及配置教程_tomcat安装-CSDN博客 1、概念 我的第一个JSP程序&#xff1a; 在WEB-INF目录之外创建一个index.jsp文件&#xff0c;然后这个文件中没有任何内容。将上面的项目部署之后&#xff0c;启动服务器…