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

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

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

  • 常用NuGet
  • Program.cs
  • appsettings.json
  • log4net.config

常用NuGet

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

Program.cs

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>

http://www.mrgr.cn/news/57454.html

相关文章:

  • OJ-1017中文分词模拟器
  • Redis内存淘汰机制!
  • 【毕业设计】工具大礼包之『Maven3.6.3安装与配置』
  • Spring Boot论坛网站:开发、部署与管理
  • 如何防止服务器被渗透攻击
  • 伪装成CrowdStrike修复文件的攻击活动分析
  • 企业办公文件加密软件推荐!10款企业常用文件加密软件排行榜!
  • Clickhouse 笔记(一) 单机版安装并将clickhouse-server定义成服务
  • angular-electron调用java
  • 企业团队经典的激励理论:期望理论、赫茨伯格双因素理论、马斯洛需求层次理论、X理论和Y理论
  • 分布式系统中的Session管理:实现跨服务器的用户会话共享
  • 【数据结构】顺序表和链表
  • 【1024程序员节】之C++系列完结篇:Web编程
  • Java8项目如何升级到Java21?有啥坑?
  • 今日早报 每日精选15条新闻简报 每天一分钟 知晓天下事 10月24日,星期四
  • 代码随想录算法训练营第53天|107. 寻找存在的路径(并查集)
  • 【MyBatis面试题】
  • 数据资产入表:政策与实践全面解读
  • 经典WinCC移植到WinCC Professional
  • 行为设计模式 -责任链模式- JAVA
  • 1024程序员节 | 1024征文
  • 探索AI的文本匹配秘诀:使用Python实现关键词搜索与RAG知识库匹配
  • js数据类型,类型检测,类型转换
  • 分组密码工作模式
  • 在示波器上观察到李萨如图形应如何调节
  • 亚马逊扛不住了!其低价商城或在11月上线,开卷Temu和Shein