mirror of
https://github.com/anjoy8/Blog.Core.git
synced 2024-09-20 23:48:27 +08:00
feat:remove startup.cs
This commit is contained in:
parent
1b3ab297f3
commit
2ce3e6b7ff
|
@ -1,4 +1,5 @@
|
|||
// 以下为asp.net 6.0的写法,如果用5.0,请看Program.five.cs文件
|
||||
// 以下为asp.net 6.0的写法,如果用5.0,请看Program.five.cs文件,
|
||||
// 或者参考github上的.net6.0分支相关代码
|
||||
|
||||
using Autofac;
|
||||
using Autofac.Extensions.DependencyInjection;
|
||||
|
@ -69,7 +70,6 @@ builder.Services.AddCorsSetup();
|
|||
builder.Services.AddMiniProfilerSetup();
|
||||
builder.Services.AddSwaggerSetup();
|
||||
builder.Services.AddJobSetup();
|
||||
//builder.Services.AddJobSetup_HostedService();
|
||||
builder.Services.AddHttpContextSetup();
|
||||
builder.Services.AddAppTableConfigSetup(builder.Environment);
|
||||
builder.Services.AddHttpApi();
|
||||
|
|
|
@ -1,232 +0,0 @@
|
|||
using System.IdentityModel.Tokens.Jwt;
|
||||
using System.Reflection;
|
||||
using System.Text;
|
||||
using Autofac;
|
||||
using Blog.Core.Common;
|
||||
using Blog.Core.Common.Helper;
|
||||
using Blog.Core.Common.LogHelper;
|
||||
using Blog.Core.Common.Seed;
|
||||
using Blog.Core.Extensions;
|
||||
using Blog.Core.Extensions.Middlewares;
|
||||
using Blog.Core.Extensions.ServiceExtensions;
|
||||
using Blog.Core.Filter;
|
||||
using Blog.Core.Hubs;
|
||||
using Blog.Core.IServices;
|
||||
using Blog.Core.Model;
|
||||
using Blog.Core.Tasks;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.AspNetCore.Mvc.Controllers;
|
||||
using Microsoft.AspNetCore.Server.Kestrel.Core;
|
||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
using Newtonsoft.Json;
|
||||
using Newtonsoft.Json.Converters;
|
||||
using Newtonsoft.Json.Serialization;
|
||||
|
||||
namespace Blog.Core
|
||||
{
|
||||
public class Startup
|
||||
{
|
||||
private IServiceCollection _services;
|
||||
|
||||
public Startup(IConfiguration configuration, IWebHostEnvironment env)
|
||||
{
|
||||
Configuration = configuration;
|
||||
Env = env;
|
||||
}
|
||||
|
||||
public IConfiguration Configuration { get; }
|
||||
public IWebHostEnvironment Env { get; }
|
||||
|
||||
// This method gets called by the runtime. Use this method to add services to the container.
|
||||
public void ConfigureServices(IServiceCollection services)
|
||||
{
|
||||
// 以下code可能与文章中不一样,对代码做了封装,具体查看右侧 Extensions 文件夹.
|
||||
services.AddSingleton(new AppSettings(Configuration));
|
||||
services.AddUiFilesZipSetup(Env);
|
||||
|
||||
Permissions.IsUseIds4 = AppSettings.app(new string[] { "Startup", "IdentityServer4", "Enabled" }).ObjToBool();
|
||||
RoutePrefix.Name = AppSettings.app(new string[] { "AppSettings", "SvcName" }).ObjToString();
|
||||
|
||||
// 确保从认证中心返回的ClaimType不被更改,不使用Map映射
|
||||
JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
|
||||
|
||||
services.AddCacheSetup();
|
||||
services.AddSqlsugarSetup();
|
||||
services.AddDbSetup();
|
||||
services.AddAutoMapperSetup();
|
||||
services.AddCorsSetup();
|
||||
services.AddMiniProfilerSetup();
|
||||
services.AddSwaggerSetup();
|
||||
services.AddJobSetup();
|
||||
services.AddHttpContextSetup();
|
||||
//services.AddAppConfigSetup(Env);
|
||||
services.AddAppTableConfigSetup(Env);//表格打印配置
|
||||
services.AddHttpApi();
|
||||
services.AddRedisInitMqSetup();
|
||||
|
||||
services.AddRabbitMQSetup();
|
||||
services.AddKafkaSetup(Configuration);
|
||||
services.AddEventBusSetup();
|
||||
|
||||
services.AddNacosSetup(Configuration);
|
||||
services.AddInitializationHostServiceSetup();
|
||||
// 授权+认证 (jwt or ids4)
|
||||
services.AddAuthorizationSetup();
|
||||
if (Permissions.IsUseIds4)
|
||||
{
|
||||
services.AddAuthentication_Ids4Setup();
|
||||
}
|
||||
else
|
||||
{
|
||||
services.AddAuthentication_JWTSetup();
|
||||
}
|
||||
|
||||
services.AddIpPolicyRateLimitSetup(Configuration);
|
||||
|
||||
services.AddSignalR().AddNewtonsoftJsonProtocol();
|
||||
|
||||
services.AddScoped<UseServiceDIAttribute>();
|
||||
|
||||
services.Configure<KestrelServerOptions>(x => x.AllowSynchronousIO = true)
|
||||
.Configure<IISServerOptions>(x => x.AllowSynchronousIO = true);
|
||||
|
||||
services.AddDistributedMemoryCache();
|
||||
services.AddSession();
|
||||
services.AddHttpPollySetup();
|
||||
|
||||
services.AddControllers(o =>
|
||||
{
|
||||
// 全局异常过滤
|
||||
o.Filters.Add(typeof(GlobalExceptionsFilter));
|
||||
// 全局路由权限公约
|
||||
//o.Conventions.Insert(0, new GlobalRouteAuthorizeConvention());
|
||||
// 全局路由前缀,统一修改路由
|
||||
o.Conventions.Insert(0, new GlobalRoutePrefixFilter(new RouteAttribute(RoutePrefix.Name)));
|
||||
})
|
||||
// 这种写法也可以
|
||||
//.AddJsonOptions(options =>
|
||||
//{
|
||||
// options.JsonSerializerOptions.PropertyNamingPolicy = null;
|
||||
//})
|
||||
//MVC全局配置Json序列化处理
|
||||
.AddNewtonsoftJson(options =>
|
||||
{
|
||||
//忽略循环引用
|
||||
options.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
|
||||
//不使用驼峰样式的key
|
||||
options.SerializerSettings.ContractResolver = new DefaultContractResolver();
|
||||
//设置时间格式
|
||||
options.SerializerSettings.DateFormatString = "yyyy-MM-dd HH:mm:ss";
|
||||
//忽略Model中为null的属性
|
||||
//options.SerializerSettings.NullValueHandling = NullValueHandling.Ignore;
|
||||
//设置本地时间而非UTC时间
|
||||
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Local;
|
||||
//添加Enum转string
|
||||
options.SerializerSettings.Converters.Add(new StringEnumConverter());
|
||||
//将long类型转为string
|
||||
options.SerializerSettings.Converters.Add(new NumberConverter(NumberConverterShip.Int64));
|
||||
});
|
||||
|
||||
services.Replace(ServiceDescriptor.Transient<IControllerActivator, ServiceBasedControllerActivator>());
|
||||
|
||||
_services = services;
|
||||
//支持编码大全 例如:支持 System.Text.Encoding.GetEncoding("GB2312") System.Text.Encoding.GetEncoding("GB18030")
|
||||
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
|
||||
}
|
||||
|
||||
// 注意在Program.CreateHostBuilder,添加Autofac服务工厂
|
||||
public void ConfigureContainer(ContainerBuilder builder)
|
||||
{
|
||||
builder.RegisterModule(new AutofacModuleRegister());
|
||||
builder.RegisterModule<AutofacPropertityModuleReg>();
|
||||
}
|
||||
|
||||
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
|
||||
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, MyContext myContext, ITasksQzServices tasksQzServices, ISchedulerCenter schedulerCenter, IHostApplicationLifetime lifetime)
|
||||
{
|
||||
// Ip限流,尽量放管道外层
|
||||
app.UseIpLimitMiddle();
|
||||
// 记录请求与返回数据
|
||||
app.UseRequestResponseLogMiddle();
|
||||
// 用户访问记录(必须放到外层,不然如果遇到异常,会报错,因为不能返回流)
|
||||
app.UseRecordAccessLogsMiddle();
|
||||
// signalr
|
||||
app.UseSignalRSendMiddle();
|
||||
// 记录ip请求
|
||||
app.UseIpLogMiddle();
|
||||
// 查看注入的所有服务
|
||||
app.UseAllServicesMiddle(_services);
|
||||
|
||||
if (env.IsDevelopment())
|
||||
{
|
||||
// 在开发环境中,使用异常页面,这样可以暴露错误堆栈信息,所以不要放在生产环境。
|
||||
app.UseDeveloperExceptionPage();
|
||||
}
|
||||
else
|
||||
{
|
||||
app.UseExceptionHandler("/Error");
|
||||
// 在非开发环境中,使用HTTP严格安全传输(or HSTS) 对于保护web安全是非常重要的。
|
||||
// 强制实施 HTTPS 在 ASP.NET Core,配合 app.UseHttpsRedirection
|
||||
//app.UseHsts();
|
||||
}
|
||||
|
||||
app.UseSession();
|
||||
app.UseSwaggerAuthorized();
|
||||
// 封装Swagger展示
|
||||
app.UseSwaggerMiddle(() => GetType().GetTypeInfo().Assembly.GetManifestResourceStream("Blog.Core.Api.index.html"));
|
||||
|
||||
// ↓↓↓↓↓↓ 注意下边这些中间件的顺序,很重要 ↓↓↓↓↓↓
|
||||
|
||||
// CORS跨域
|
||||
app.UseCors(AppSettings.app(new string[] { "Startup", "Cors", "PolicyName" }));
|
||||
// 跳转https
|
||||
//app.UseHttpsRedirection();
|
||||
// 使用静态文件
|
||||
DefaultFilesOptions defaultFilesOptions = new DefaultFilesOptions();
|
||||
defaultFilesOptions.DefaultFileNames.Clear();
|
||||
defaultFilesOptions.DefaultFileNames.Add("index.html");
|
||||
app.UseDefaultFiles(defaultFilesOptions);
|
||||
app.UseStaticFiles();
|
||||
// 使用cookie
|
||||
app.UseCookiePolicy();
|
||||
// 返回错误码
|
||||
app.UseStatusCodePages();
|
||||
// Routing
|
||||
app.UseRouting();
|
||||
// 这种自定义授权中间件,可以尝试,但不推荐
|
||||
// app.UseJwtTokenAuth();
|
||||
|
||||
// 测试用户,用来通过鉴权
|
||||
if (Configuration.GetValue<bool>("AppSettings:UseLoadTest"))
|
||||
{
|
||||
app.UseMiddleware<ByPassAuthMiddleware>();
|
||||
}
|
||||
// 先开启认证
|
||||
app.UseAuthentication();
|
||||
// 然后是授权中间件
|
||||
app.UseAuthorization();
|
||||
//开启性能分析
|
||||
app.UseMiniProfilerMiddleware();
|
||||
// 开启异常中间件,要放到最后
|
||||
//app.UseExceptionHandlerMidd();
|
||||
|
||||
app.UseEndpoints(endpoints =>
|
||||
{
|
||||
endpoints.MapControllerRoute(
|
||||
name: "default",
|
||||
pattern: "{controller=Home}/{action=Index}/{id?}");
|
||||
|
||||
endpoints.MapHub<ChatHub>("/api2/chatHub");
|
||||
});
|
||||
|
||||
// 生成种子数据
|
||||
//app.UseSeedDataMiddle(myContext, Env.WebRootPath);
|
||||
// 开启QuartzNetJob调度服务
|
||||
//app.UseQuartzJobMiddleware(tasksQzServices, schedulerCenter);
|
||||
// 服务注册
|
||||
//app.UseConsulMiddle(Configuration, lifetime);
|
||||
// 事件总线,订阅服务
|
||||
//app.ConfigureEventBus();
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,12 +1,10 @@
|
|||
using Autofac;
|
||||
using Autofac.Extensions.DependencyInjection;
|
||||
using Autofac.Extras.DynamicProxy;
|
||||
using AutoMapper;
|
||||
using Blog.Core.AuthHelper;
|
||||
using Blog.Core.Common;
|
||||
using Blog.Core.Common.AppConfig;
|
||||
using Blog.Core.Common.DB;
|
||||
using Blog.Core.Common.LogHelper;
|
||||
using Blog.Core.Common.Seed;
|
||||
using Blog.Core.Extensions;
|
||||
using Blog.Core.IRepository.Base;
|
||||
|
@ -17,9 +15,6 @@ using Microsoft.AspNetCore.Mvc.Controllers;
|
|||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.DependencyInjection.Extensions;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Security.Claims;
|
||||
using System.Text;
|
||||
|
@ -56,7 +51,7 @@ namespace Blog.Core.Tests
|
|||
var basePath = AppContext.BaseDirectory;
|
||||
|
||||
IServiceCollection services = new ServiceCollection();
|
||||
services.AddAutoMapper(typeof(Startup));
|
||||
services.AddAutoMapperSetup();
|
||||
|
||||
services.AddSingleton(new AppSettings(basePath));
|
||||
services.AddScoped<DBSeed>();
|
||||
|
@ -116,9 +111,9 @@ namespace Blog.Core.Tests
|
|||
|
||||
// 属性注入
|
||||
var controllerBaseType = typeof(ControllerBase);
|
||||
builder.RegisterAssemblyTypes(typeof(Startup).Assembly)
|
||||
.Where(t => controllerBaseType.IsAssignableFrom(t) && t != controllerBaseType)
|
||||
.PropertiesAutowired();
|
||||
//builder.RegisterAssemblyTypes(typeof(Program).Assembly)
|
||||
// .Where(t => controllerBaseType.IsAssignableFrom(t) && t != controllerBaseType)
|
||||
// .PropertiesAutowired();
|
||||
|
||||
var servicesDllFile = Path.Combine(basePath, "Blog.Core.Services.dll");
|
||||
var assemblysServices = Assembly.LoadFrom(servicesDllFile);
|
||||
|
|
Loading…
Reference in New Issue
Block a user