mirror of
https://github.com/CoreUnion/CoreShop.git
synced 2026-10-16 21:08:47 +08:00
【优化】将两个站点的 Program.cs 与 AppSettingsHelper.cs 由 GBK 改存为 UTF-8(带 BOM),中文注释在按 UTF-8 打开的编辑器里显示为乱码的问题就此消除;只调整文件编码,代码内容逐字符未变,编译与警告数均与改动前一致。
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
|
||||
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Net.NetworkInformation;
|
||||
@@ -13,7 +13,7 @@ using SqlSugar.Extensions;
|
||||
namespace CoreCms.Net.Configuration
|
||||
{
|
||||
/// <summary>
|
||||
/// 获取Appsettings配置信息
|
||||
/// 获取Appsettings配置信息
|
||||
/// </summary>
|
||||
public class AppSettingsHelper
|
||||
{
|
||||
@@ -25,7 +25,7 @@ namespace CoreCms.Net.Configuration
|
||||
.SetBasePath(contentPath)
|
||||
.Add(new JsonConfigurationSource { Path = "appsettings.json", Optional = false, ReloadOnChange = true });
|
||||
|
||||
//非 Production 环境追加加载对应的环境配置文件(如 appsettings.Development.json),用于本地覆盖默认配置
|
||||
//非 Production 环境追加加载对应的环境配置文件(如 appsettings.Development.json),用于本地覆盖默认配置
|
||||
if (!string.IsNullOrEmpty(environmentName) &&
|
||||
!environmentName.Equals("Production", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
@@ -41,10 +41,10 @@ namespace CoreCms.Net.Configuration
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 封装要操作的字符
|
||||
/// 封装要操作的字符
|
||||
/// AppSettingsHelper.GetContent(new string[] { "JwtConfig", "SecretKey" });
|
||||
/// </summary>
|
||||
/// <param name="sections">节点配置</param>
|
||||
/// <param name="sections">节点配置</param>
|
||||
/// <returns></returns>
|
||||
public static string GetContent(params string[] sections)
|
||||
{
|
||||
@@ -65,20 +65,20 @@ namespace CoreCms.Net.Configuration
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 获取电脑 MAC(物理) 地址
|
||||
/// 获取电脑 MAC(物理) 地址
|
||||
/// </summary>
|
||||
/// <param name="needToken">是否只是为了套取key生成一个不同部署环境不同的序列串</param>
|
||||
/// <param name="needToken">是否只是为了套取key生成一个不同部署环境不同的序列串</param>
|
||||
/// <returns></returns>
|
||||
public static string GetMACIp(bool needToken)
|
||||
{
|
||||
//本地计算机网络连接信息
|
||||
//本地计算机网络连接信息
|
||||
IPGlobalProperties computerProperties = IPGlobalProperties.GetIPGlobalProperties();
|
||||
//获取本机所有网络连接
|
||||
//获取本机所有网络连接
|
||||
NetworkInterface[] nics = NetworkInterface.GetAllNetworkInterfaces();
|
||||
|
||||
//获取本机电脑名
|
||||
//获取本机电脑名
|
||||
var HostName = computerProperties.HostName;
|
||||
//获取域名
|
||||
//获取域名
|
||||
var DomainName = computerProperties.DomainName;
|
||||
|
||||
if (nics == null || nics.Length < 1)
|
||||
@@ -93,7 +93,7 @@ namespace CoreCms.Net.Configuration
|
||||
|
||||
var adapterDescription = adapter.Description;
|
||||
var NetworkInterfaceType = adapter.NetworkInterfaceType;
|
||||
if (adapterName == "本地连接" || needToken)
|
||||
if (adapterName == "本地连接" || needToken)
|
||||
{
|
||||
PhysicalAddress address = adapter.GetPhysicalAddress();
|
||||
byte[] bytes = address.GetAddressBytes();
|
||||
@@ -114,15 +114,15 @@ namespace CoreCms.Net.Configuration
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 获取电脑计算机名
|
||||
/// 获取电脑计算机名
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public static string GetHostName()
|
||||
{
|
||||
//本地计算机网络连接信息
|
||||
//本地计算机网络连接信息
|
||||
IPGlobalProperties computerProperties = IPGlobalProperties.GetIPGlobalProperties();
|
||||
|
||||
//获取本机电脑名
|
||||
//获取本机电脑名
|
||||
var hostName = computerProperties.HostName;
|
||||
|
||||
return !string.IsNullOrEmpty(hostName) ? hostName : "CoreShop.Professional";
|
||||
@@ -133,25 +133,25 @@ namespace CoreCms.Net.Configuration
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// 转MD5
|
||||
/// 转MD5
|
||||
/// </summary>
|
||||
/// <param name="str"></param>
|
||||
/// <returns></returns>
|
||||
public static string GetMachineRandomKey(string str)
|
||||
{
|
||||
MD5 md5 = MD5.Create();
|
||||
// 将字符串转换成字节数组
|
||||
// 将字符串转换成字节数组
|
||||
byte[] byteOld = Encoding.UTF8.GetBytes(str);
|
||||
// 调用加密方法
|
||||
// 调用加密方法
|
||||
byte[] byteNew = md5.ComputeHash(byteOld);
|
||||
// 将加密结果转换为字符串
|
||||
// 将加密结果转换为字符串
|
||||
StringBuilder sb = new StringBuilder();
|
||||
foreach (byte b in byteNew)
|
||||
{
|
||||
// 将字节转换成16进制表示的字符串,
|
||||
// 将字节转换成16进制表示的字符串,
|
||||
sb.Append(b.ToString("x2"));
|
||||
}
|
||||
// 返回加密的字符串
|
||||
// 返回加密的字符串
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using Autofac.Extensions.DependencyInjection;
|
||||
using Autofac.Extensions.DependencyInjection;
|
||||
using CoreCms.Net.Loging;
|
||||
using Microsoft.AspNetCore.Hosting;
|
||||
using Microsoft.Extensions.Configuration;
|
||||
@@ -32,96 +32,96 @@ using Yitter.IdGenerator;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
//添加本地路径获取支持
|
||||
//添加本地路径获取支持
|
||||
builder.Services.AddSingleton(new AppSettingsHelper(builder.Environment.ContentRootPath, builder.Environment.EnvironmentName));
|
||||
builder.Services.AddSingleton(new LogLockHelper(builder.Environment.ContentRootPath));
|
||||
|
||||
//Memory缓存
|
||||
//Memory缓存
|
||||
builder.Services.AddMemoryCacheSetup();
|
||||
//Redis缓存
|
||||
//Redis缓存
|
||||
builder.Services.AddRedisCacheSetup();
|
||||
|
||||
//添加数据库连接SqlSugar注入支持
|
||||
//添加数据库连接SqlSugar注入支持
|
||||
builder.Services.AddSqlSugarSetup();
|
||||
//配置跨域(CORS)
|
||||
//配置跨域(CORS)
|
||||
builder.Services.AddCorsSetup();
|
||||
|
||||
//添加session支持(session依赖于cache进行存储)
|
||||
//添加session支持(session依赖于cache进行存储)
|
||||
builder.Services.AddSession();
|
||||
// AutoMapper支持
|
||||
// AutoMapper支持(15版本后启用了授权模式,大家可以前往https://luckypennysoftware.com/申请自己免费的key)
|
||||
// AutoMapper支持
|
||||
// AutoMapper支持(15版本后启用了授权模式,大家可以前往https://luckypennysoftware.com/申请自己免费的key)
|
||||
//builder.Services.AddAutoMapper(typeof(AutoMapperConfiguration));
|
||||
builder.Services.AddAutoMapper(cfg => cfg.LicenseKey = AppSettingsConstVars.AutoMapperLicenseKey, typeof(AutoMapperConfiguration));
|
||||
|
||||
//使用 SignalR
|
||||
//使用 SignalR
|
||||
builder.Services.AddSignalR();
|
||||
|
||||
// 引入Payment 依赖注入(支付宝支付/微信支付)
|
||||
// 引入Payment 依赖注入(支付宝支付/微信支付)
|
||||
builder.Services.AddAlipay();
|
||||
builder.Services.AddWeChatPay();
|
||||
|
||||
// 在 appsettings.json 中 配置选项
|
||||
// 在 appsettings.json 中 配置选项
|
||||
builder.Services.Configure<WeChatPayOptions>(builder.Configuration.GetSection("WeChatPay"));
|
||||
builder.Services.Configure<AlipayOptions>(builder.Configuration.GetSection("Alipay"));
|
||||
|
||||
//注册自定义微信接口配置文件
|
||||
//注册自定义微信接口配置文件
|
||||
builder.Services.Configure<CoreCms.Net.WeChat.Service.Options.WeChatOptions>(builder.Configuration.GetSection(nameof(CoreCms.Net.WeChat.Service.Options.WeChatOptions)));
|
||||
|
||||
// 注入工厂 HTTP 客户端
|
||||
// 注入工厂 HTTP 客户端
|
||||
builder.Services.AddHttpClient();
|
||||
builder.Services.AddSingleton<CoreCms.Net.WeChat.Service.HttpClients.IWeChatApiHttpClientFactory, CoreCms.Net.WeChat.Service.HttpClients.WeChatApiHttpClientFactory>();
|
||||
|
||||
//Swagger接口文档注入
|
||||
//Swagger接口文档注入
|
||||
builder.Services.AddAdminSwaggerSetup();
|
||||
|
||||
//配置易联云打印机
|
||||
//配置易联云打印机
|
||||
builder.Services.AddYiLianYunSetup();
|
||||
|
||||
//jwt授权支持注入
|
||||
//jwt授权支持注入
|
||||
builder.Services.AddAuthorizationSetupForAdmin();
|
||||
//上下文注入
|
||||
//上下文注入
|
||||
builder.Services.AddHttpContextSetup();
|
||||
|
||||
//服务配置中加入AutoFac控制器替换规则。
|
||||
//服务配置中加入AutoFac控制器替换规则。
|
||||
builder.Services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>());
|
||||
|
||||
//注册mvc,注册razor引擎视图
|
||||
//注册mvc,注册razor引擎视图
|
||||
builder.Services.AddMvc(options =>
|
||||
{
|
||||
//实体验证
|
||||
//实体验证
|
||||
options.Filters.Add<RequiredErrorForAdmin>();
|
||||
//异常处理
|
||||
//异常处理
|
||||
options.Filters.Add<GlobalExceptionsFilterForAdmin>();
|
||||
//Swagger剔除不需要加入api展示的列表
|
||||
//Swagger剔除不需要加入api展示的列表
|
||||
options.Conventions.Add(new ApiExplorerIgnores());
|
||||
|
||||
options.EnableEndpointRouting = false;
|
||||
})
|
||||
.AddNewtonsoftJson(p =>
|
||||
{
|
||||
//数据格式首字母小写 不使用驼峰
|
||||
//数据格式首字母小写 不使用驼峰
|
||||
p.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
|
||||
//不使用驼峰样式的key
|
||||
//不使用驼峰样式的key
|
||||
//p.SerializerSettings.ContractResolver = new DefaultContractResolver();
|
||||
//忽略循环引用
|
||||
//忽略循环引用
|
||||
p.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
|
||||
//设置时间格式
|
||||
//设置时间格式
|
||||
p.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
|
||||
});
|
||||
|
||||
|
||||
// 雪花漂移算法
|
||||
// 创建 IdGeneratorOptions 对象,请在构造函数中输入 WorkerId:
|
||||
// 雪花漂移算法
|
||||
// 创建 IdGeneratorOptions 对象,请在构造函数中输入 WorkerId:
|
||||
var options = new IdGeneratorOptions(AppSettingsConstVars.SnowflakeIdWorkerId);
|
||||
// 保存参数(必须的操作,否则以上设置都不能生效):
|
||||
// 保存参数(必须的操作,否则以上设置都不能生效):
|
||||
YitIdHelper.SetIdGenerator(options);
|
||||
|
||||
#region AutoFac注册============================================================================
|
||||
#region AutoFac注册============================================================================
|
||||
|
||||
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
|
||||
builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder =>
|
||||
{
|
||||
//获取所有控制器类型并使用属性注入
|
||||
//获取所有控制器类型并使用属性注入
|
||||
var controllerBaseType = typeof(ControllerBase);
|
||||
containerBuilder.RegisterAssemblyTypes(typeof(Program).Assembly)
|
||||
.Where(t => controllerBaseType.IsAssignableFrom(t) && t != controllerBaseType)
|
||||
@@ -135,23 +135,23 @@ builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder =>
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
#region 解决Ubuntu Nginx 代理不能获取IP问题
|
||||
#region 解决Ubuntu Nginx 代理不能获取IP问题
|
||||
app.UseForwardedHeaders(new ForwardedHeadersOptions
|
||||
{
|
||||
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
|
||||
});
|
||||
#endregion
|
||||
|
||||
// 记录请求与返回数据 (注意开启权限,不然本地无法写入)
|
||||
// 记录请求与返回数据 (注意开启权限,不然本地无法写入)
|
||||
app.UseRequestResponseLog();
|
||||
// 用户访问记录(必须放到外层,不然如果遇到异常,会报错,因为不能返回流)(注意开启权限,不然本地无法写入)
|
||||
// 用户访问记录(必须放到外层,不然如果遇到异常,会报错,因为不能返回流)(注意开启权限,不然本地无法写入)
|
||||
app.UseRecordAccessLogsMildd();
|
||||
// 记录ip请求 (注意开启权限,不然本地无法写入)
|
||||
// 记录ip请求 (注意开启权限,不然本地无法写入)
|
||||
app.UseIpLogMildd();
|
||||
|
||||
app.UseSwagger().UseSwaggerUI(c =>
|
||||
{
|
||||
//根据版本名称倒序 遍历展示
|
||||
//根据版本名称倒序 遍历展示
|
||||
typeof(CustomApiVersion.ApiVersions).GetEnumNames().OrderByDescending(e => e).ToList().ForEach(
|
||||
version =>
|
||||
{
|
||||
@@ -160,12 +160,12 @@ app.UseSwagger().UseSwaggerUI(c =>
|
||||
c.RoutePrefix = "doc";
|
||||
});
|
||||
|
||||
//使用 Session
|
||||
//使用 Session
|
||||
app.UseSession();
|
||||
|
||||
if (app.Environment.IsDevelopment())
|
||||
{
|
||||
// 在开发环境中,使用异常页面,这样可以暴露错误堆栈信息,所以不要放在生产环境。
|
||||
// 在开发环境中,使用异常页面,这样可以暴露错误堆栈信息,所以不要放在生产环境。
|
||||
app.UseDeveloperExceptionPage();
|
||||
}
|
||||
else
|
||||
@@ -175,29 +175,29 @@ else
|
||||
app.UseHsts();
|
||||
}
|
||||
|
||||
// CORS跨域
|
||||
// CORS跨域
|
||||
app.UseCors(AppSettingsConstVars.CorsPolicyName);
|
||||
// 跳转https
|
||||
// 跳转https
|
||||
//app.UseHttpsRedirection();
|
||||
// 使用静态文件
|
||||
// 使用静态文件
|
||||
app.UseStaticFiles();
|
||||
// 使用cookie
|
||||
// 使用cookie
|
||||
app.UseCookiePolicy();
|
||||
// 返回错误码
|
||||
// 返回错误码
|
||||
app.UseStatusCodePages();
|
||||
// Routing
|
||||
app.UseRouting();
|
||||
// 先开启认证
|
||||
// 先开启认证
|
||||
app.UseAuthentication();
|
||||
// 然后是授权中间件
|
||||
// 然后是授权中间件
|
||||
app.UseAuthorization();
|
||||
|
||||
app.MapControllerRoute(
|
||||
name: "default",
|
||||
pattern: "{controller=Home}/{action=Index}/{id?}");
|
||||
|
||||
//设置默认起始页(如default.html)
|
||||
//此处的路径是相对于wwwroot文件夹的相对路径
|
||||
//设置默认起始页(如default.html)
|
||||
//此处的路径是相对于wwwroot文件夹的相对路径
|
||||
var defaultFilesOptions = new DefaultFilesOptions();
|
||||
defaultFilesOptions.DefaultFileNames.Clear();
|
||||
defaultFilesOptions.DefaultFileNames.Add("index.html");
|
||||
@@ -206,16 +206,16 @@ app.UseStaticFiles();
|
||||
|
||||
try
|
||||
{
|
||||
//确保NLog.config中连接字符串与appsettings.json中同步
|
||||
//确保NLog.config中连接字符串与appsettings.json中同步
|
||||
NLogUtil.EnsureNlogConfig("NLog.config");
|
||||
//其他项目启动时需要做的事情
|
||||
NLogUtil.WriteAll(NLog.LogLevel.Trace, LogType.ApiRequest, "接口启动", "接口启动成功");
|
||||
//其他项目启动时需要做的事情
|
||||
NLogUtil.WriteAll(NLog.LogLevel.Trace, LogType.ApiRequest, "接口启动", "接口启动成功");
|
||||
|
||||
app.Run();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
//使用Nlog写到本地日志文件(万一数据库没创建/连接成功)
|
||||
NLogUtil.WriteFileLog(NLog.LogLevel.Error, LogType.ApiRequest, "接口启动", "初始化数据异常", ex);
|
||||
//使用Nlog写到本地日志文件(万一数据库没创建/连接成功)
|
||||
NLogUtil.WriteFileLog(NLog.LogLevel.Error, LogType.ApiRequest, "接口启动", "初始化数据异常", ex);
|
||||
throw;
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
using System;
|
||||
using System;
|
||||
using System.Linq;
|
||||
using Autofac;
|
||||
using Autofac.Extensions.DependencyInjection;
|
||||
@@ -35,96 +35,96 @@ using NLog.Web;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
//添加本地路径获取支持
|
||||
//添加本地路径获取支持
|
||||
builder.Services.AddSingleton(new AppSettingsHelper(builder.Environment.ContentRootPath, builder.Environment.EnvironmentName));
|
||||
builder.Services.AddSingleton(new LogLockHelper(builder.Environment.ContentRootPath));
|
||||
|
||||
//Memory缓存
|
||||
//Memory缓存
|
||||
builder.Services.AddMemoryCacheSetup();
|
||||
//Redis缓存
|
||||
//Redis缓存
|
||||
builder.Services.AddRedisCacheSetup();
|
||||
|
||||
//添加数据库连接SqlSugar注入支持
|
||||
//添加数据库连接SqlSugar注入支持
|
||||
builder.Services.AddSqlSugarSetup();
|
||||
//配置跨域(CORS)
|
||||
//配置跨域(CORS)
|
||||
builder.Services.AddCorsSetup();
|
||||
|
||||
//添加session支持(session依赖于cache进行存储)
|
||||
//添加session支持(session依赖于cache进行存储)
|
||||
builder.Services.AddSession();
|
||||
// AutoMapper支持
|
||||
// AutoMapper支持(15版本后启用了授权模式,大家可以前往https://luckypennysoftware.com/申请自己免费的key)
|
||||
// AutoMapper支持
|
||||
// AutoMapper支持(15版本后启用了授权模式,大家可以前往https://luckypennysoftware.com/申请自己免费的key)
|
||||
//builder.Services.AddAutoMapper(typeof(AutoMapperConfiguration));
|
||||
builder.Services.AddAutoMapper(cfg => cfg.LicenseKey = AppSettingsConstVars.AutoMapperLicenseKey, typeof(AutoMapperConfiguration));
|
||||
|
||||
//MediatR(只需要注册一个,同项目或类库下就不需要注册多个)
|
||||
//MediatR(只需要注册一个,同项目或类库下就不需要注册多个)
|
||||
builder.Services.AddMediatR(cfg => cfg.RegisterServicesFromAssembly(typeof(TextMessageEventCommand).Assembly));
|
||||
|
||||
//使用 SignalR
|
||||
//使用 SignalR
|
||||
builder.Services.AddSignalR();
|
||||
|
||||
//Redis消息队列
|
||||
//Redis消息队列
|
||||
builder.Services.AddRedisMessageQueueSetup();
|
||||
|
||||
// 引入Payment 依赖注入(支付宝支付/微信支付)
|
||||
// 引入Payment 依赖注入(支付宝支付/微信支付)
|
||||
builder.Services.AddAlipay();
|
||||
builder.Services.AddWeChatPay();
|
||||
|
||||
// 在 appsettings.json 中 配置选项
|
||||
// 在 appsettings.json 中 配置选项
|
||||
builder.Services.Configure<WeChatPayOptions>(builder.Configuration.GetSection("WeChatPay"));
|
||||
builder.Services.Configure<AlipayOptions>(builder.Configuration.GetSection("Alipay"));
|
||||
|
||||
//注册自定义微信接口配置文件
|
||||
//注册自定义微信接口配置文件
|
||||
builder.Services.Configure<CoreCms.Net.WeChat.Service.Options.WeChatOptions>(builder.Configuration.GetSection(nameof(CoreCms.Net.WeChat.Service.Options.WeChatOptions)));
|
||||
|
||||
// 注入工厂 HTTP 客户端
|
||||
// 注入工厂 HTTP 客户端
|
||||
builder.Services.AddHttpClient();
|
||||
builder.Services.AddSingleton<CoreCms.Net.WeChat.Service.HttpClients.IWeChatApiHttpClientFactory, CoreCms.Net.WeChat.Service.HttpClients.WeChatApiHttpClientFactory>();
|
||||
|
||||
//Swagger接口文档注入
|
||||
//Swagger接口文档注入
|
||||
builder.Services.AddClientSwaggerSetup();
|
||||
|
||||
//配置易联云打印机
|
||||
//配置易联云打印机
|
||||
builder.Services.AddYiLianYunSetup();
|
||||
|
||||
//注册Hangfire定时任务
|
||||
//注册Hangfire定时任务
|
||||
builder.Services.AddHangFireSetup();
|
||||
|
||||
//授权支持注入
|
||||
//授权支持注入
|
||||
builder.Services.AddAuthorizationSetupForClient();
|
||||
//上下文注入
|
||||
//上下文注入
|
||||
builder.Services.AddHttpContextSetup();
|
||||
|
||||
//服务配置中加入AutoFac控制器替换规则。
|
||||
//服务配置中加入AutoFac控制器替换规则。
|
||||
builder.Services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>());
|
||||
|
||||
//注册mvc,注册razor引擎视图
|
||||
//注册mvc,注册razor引擎视图
|
||||
builder.Services.AddMvc(options =>
|
||||
{
|
||||
//实体验证
|
||||
//实体验证
|
||||
options.Filters.Add<RequiredErrorForClent>();
|
||||
//异常处理
|
||||
//异常处理
|
||||
options.Filters.Add<GlobalExceptionsFilterForClent>();
|
||||
//Swagger剔除不需要加入api展示的列表
|
||||
//Swagger剔除不需要加入api展示的列表
|
||||
options.Conventions.Add(new ApiExplorerIgnores());
|
||||
})
|
||||
.AddNewtonsoftJson(p =>
|
||||
{
|
||||
//数据格式首字母小写 不使用驼峰
|
||||
//数据格式首字母小写 不使用驼峰
|
||||
p.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
|
||||
//不使用驼峰样式的key
|
||||
//不使用驼峰样式的key
|
||||
//p.SerializerSettings.ContractResolver = new DefaultContractResolver();
|
||||
//忽略循环引用
|
||||
//忽略循环引用
|
||||
p.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
|
||||
//设置时间格式(必须使用yyyy/MM/dd格式,因为ios系统不支持2018-03-29格式的时间,只识别2018/03/09这种格式。)
|
||||
//设置时间格式(必须使用yyyy/MM/dd格式,因为ios系统不支持2018-03-29格式的时间,只识别2018/03/09这种格式。)
|
||||
p.SerializerSettings.DateFormatString = "yyyy/MM/dd HH:mm:ss";
|
||||
});
|
||||
|
||||
#region AutoFac注册============================================================================
|
||||
#region AutoFac注册============================================================================
|
||||
|
||||
builder.Host.UseServiceProviderFactory(new AutofacServiceProviderFactory());
|
||||
builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder =>
|
||||
{
|
||||
//获取所有控制器类型并使用属性注入
|
||||
//获取所有控制器类型并使用属性注入
|
||||
var controllerBaseType = typeof(ControllerBase);
|
||||
containerBuilder.RegisterAssemblyTypes(typeof(Program).Assembly)
|
||||
.Where(t => controllerBaseType.IsAssignableFrom(t) && t != controllerBaseType)
|
||||
@@ -138,39 +138,39 @@ builder.Host.ConfigureContainer<ContainerBuilder>(containerBuilder =>
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
#region 解决Ubuntu Nginx 代理不能获取IP问题
|
||||
#region 解决Ubuntu Nginx 代理不能获取IP问题
|
||||
app.UseForwardedHeaders(new ForwardedHeadersOptions
|
||||
{
|
||||
ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
|
||||
});
|
||||
#endregion
|
||||
|
||||
// 记录请求与返回数据 (注意开启权限,不然本地无法写入)
|
||||
// 记录请求与返回数据 (注意开启权限,不然本地无法写入)
|
||||
app.UseRequestResponseLog();
|
||||
// 用户访问记录(必须放到外层,不然如果遇到异常,会报错,因为不能返回流)(注意开启权限,不然本地无法写入)
|
||||
// 用户访问记录(必须放到外层,不然如果遇到异常,会报错,因为不能返回流)(注意开启权限,不然本地无法写入)
|
||||
app.UseRecordAccessLogsMildd();
|
||||
// 记录ip请求 (注意开启权限,不然本地无法写入)
|
||||
// 记录ip请求 (注意开启权限,不然本地无法写入)
|
||||
app.UseIpLogMildd();
|
||||
// Swagger授权登录拦截
|
||||
// Swagger授权登录拦截
|
||||
app.UseSwaggerAuthorizedMildd();
|
||||
//强制显示中文
|
||||
//强制显示中文
|
||||
System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-CN");
|
||||
|
||||
app.UseSwagger().UseSwaggerUI(c =>
|
||||
{
|
||||
//根据版本名称倒序 遍历展示
|
||||
//根据版本名称倒序 遍历展示
|
||||
typeof(CustomApiVersion.ApiVersions).GetEnumNames().OrderByDescending(e => e).ToList().ForEach(
|
||||
version =>
|
||||
{
|
||||
c.SwaggerEndpoint($"/swagger/{version}/swagger.json", $"Doc {version}");
|
||||
});
|
||||
//设置默认跳转到swagger-ui
|
||||
//设置默认跳转到swagger-ui
|
||||
c.RoutePrefix = AppSettingsConstVars.SwaggerRoutePrefix;
|
||||
});
|
||||
|
||||
#region Hangfire定时任务
|
||||
#region Hangfire定时任务
|
||||
|
||||
//授权
|
||||
//授权
|
||||
var filter = new BasicAuthAuthorizationFilter(
|
||||
new BasicAuthAuthorizationFilterOptions
|
||||
{
|
||||
@@ -191,8 +191,8 @@ var filter = new BasicAuthAuthorizationFilter(
|
||||
});
|
||||
var hangfireOptions = new Hangfire.DashboardOptions
|
||||
{
|
||||
AppPath = "/",//返回时跳转的地址
|
||||
DisplayStorageConnectionString = false,//是否显示数据库连接信息
|
||||
AppPath = "/",//返回时跳转的地址
|
||||
DisplayStorageConnectionString = false,//是否显示数据库连接信息
|
||||
Authorization = new[]
|
||||
{
|
||||
filter
|
||||
@@ -203,18 +203,18 @@ var hangfireOptions = new Hangfire.DashboardOptions
|
||||
app.UseHangfireDashboard(AppSettingsConstVars.HangFireRoutePrefix, hangfireOptions);
|
||||
HangfireDispose.HangfireService();
|
||||
|
||||
//设置hangfire定时任务过期时间
|
||||
//设置hangfire定时任务过期时间
|
||||
GlobalStateHandlers.Handlers.Add(new SucceededStateExpireHandler(AppSettingsConstVars.HangFireJobExpirationTimeOut));
|
||||
|
||||
|
||||
#endregion
|
||||
|
||||
//使用 Session
|
||||
//使用 Session
|
||||
app.UseSession();
|
||||
|
||||
if (app.Environment.IsDevelopment())
|
||||
{
|
||||
// 在开发环境中,使用异常页面,这样可以暴露错误堆栈信息,所以不要放在生产环境。
|
||||
// 在开发环境中,使用异常页面,这样可以暴露错误堆栈信息,所以不要放在生产环境。
|
||||
app.UseDeveloperExceptionPage();
|
||||
}
|
||||
else
|
||||
@@ -224,25 +224,25 @@ else
|
||||
app.UseHsts();
|
||||
}
|
||||
|
||||
// CORS跨域
|
||||
// CORS跨域
|
||||
app.UseCors(AppSettingsConstVars.CorsPolicyName);
|
||||
|
||||
// Routing
|
||||
app.UseRouting();
|
||||
|
||||
// 使用静态文件
|
||||
// 使用静态文件
|
||||
app.UseStaticFiles();
|
||||
// 先开启认证
|
||||
// 先开启认证
|
||||
app.UseAuthentication();
|
||||
// 然后是授权中间件
|
||||
// 然后是授权中间件
|
||||
app.UseAuthorization();
|
||||
|
||||
app.MapControllerRoute(
|
||||
name: "default",
|
||||
pattern: "{controller=Home}/{action=Index}/{id?}");
|
||||
|
||||
//设置默认起始页(如default.html)
|
||||
//此处的路径是相对于wwwroot文件夹的相对路径
|
||||
//设置默认起始页(如default.html)
|
||||
//此处的路径是相对于wwwroot文件夹的相对路径
|
||||
var defaultFilesOptions = new DefaultFilesOptions();
|
||||
defaultFilesOptions.DefaultFileNames.Clear();
|
||||
defaultFilesOptions.DefaultFileNames.Add("index.html");
|
||||
@@ -251,16 +251,16 @@ app.UseStaticFiles();
|
||||
|
||||
try
|
||||
{
|
||||
//确保NLog.config中连接字符串与appsettings.json中同步
|
||||
//确保NLog.config中连接字符串与appsettings.json中同步
|
||||
NLogUtil.EnsureNlogConfig("NLog.config");
|
||||
//其他项目启动时需要做的事情
|
||||
NLogUtil.WriteAll(NLog.LogLevel.Trace, LogType.ApiRequest, "接口启动", "接口启动成功");
|
||||
//其他项目启动时需要做的事情
|
||||
NLogUtil.WriteAll(NLog.LogLevel.Trace, LogType.ApiRequest, "接口启动", "接口启动成功");
|
||||
|
||||
app.Run();
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
//使用Nlog写到本地日志文件(万一数据库没创建/连接成功)
|
||||
NLogUtil.WriteFileLog(NLog.LogLevel.Error, LogType.ApiRequest, "接口启动", "初始化数据异常", ex);
|
||||
//使用Nlog写到本地日志文件(万一数据库没创建/连接成功)
|
||||
NLogUtil.WriteFileLog(NLog.LogLevel.Error, LogType.ApiRequest, "接口启动", "初始化数据异常", ex);
|
||||
throw;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user