LindDotNetCore中间件
大叔认识中间件就是主要对http请求进行拦截,然后添加具体个性化功能的逻辑,这种把请求切开,添加新逻辑的方式一般称为面向方面的逻辑AOP!
- 授权中间件
- 请求链跟踪中间件
- 响应时间中间件
授权中间件
请求有效性的校验
- 授权参数
////// 授权配置 /// public class AuthorizationConfig { ////// 统一密钥 /// public string EncryptKey { get; set; } ////// 过期时间秒数 /// public int ExpiredSecond { get; set; } ////// 被授权的app /// public string[] AppList { get; set; } }
- 客户端请求参数
////// 从http请求发过来的授权实体 /// public class AuthorizationRequestInfo { public string ApplicationId { get; set; } public string Timestamp { get; set; } public string Sinature { get; set; } }
- 请求拦截器,处理请求有效性,对app,过期时间,加密方式进行校验
string computeSinature = MD5($"{requestInfo.ApplicationId}-{requestInfo.Timestamp}-{_options.EncryptKey}"); double tmpTimestamp; if (computeSinature.Equals(requestInfo.Sinature) && double.TryParse(requestInfo.Timestamp, out tmpTimestamp)) { if (ValidateExpired(tmpTimestamp, _options.ExpiredSecond)) { await ReturnTimeOut(context); } else { await ValidateApp(context, requestInfo.ApplicationId); } } else { await ReturnNotAuthorized(context); }
- 为开发人员提供友好的扩展方法,用来注册中间件
////// 注册授权服务-step1 /// /// Thefor adding services. /// A delegate to configure the . /// public static IServiceCollection AddLindAuthrization(this IServiceCollection services, Action configureOptions = null) { if (services == null) { throw new ArgumentNullException(nameof(services)); } var options = new AuthorizationConfig(); configureOptions?.Invoke(options); ObjectMapper.MapperTo(options, ConfigFileHelper.Get ()); services.AddSingleton(options); return services; } /// /// 使用授权中间件-step2 /// /// /// ///public static IApplicationBuilder UseLindAuthrization(this IApplicationBuilder builder) { if (builder == null) { throw new ArgumentNullException(nameof(builder)); } var options = builder.ApplicationServices.GetService (); return builder.UseMiddleware (options); }
- 使用授权中间件Startup中注册
// 注册服务 services.AddLindAuthrization(options => { options.EncryptKey = "abc123"; options.ExpiredSecond = 50; options.AppList = new string[] { "1", "2", "3" }; }); // 注册中间件 public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseLindAuthrization(); app.UseMvc(); }
请求链跟踪中间件
记录请求经过的整个过程,对于多api相互调用的场景比较有用
响应时间中间件
记录大于指定时间的请求信息,方便做性能整体的提升