极简实用的Asp.NetCore模块化框架新增CMS模块
简介
关于这个框架的背景,在前面我已经交代过了。不清楚的可以查看这个链接 极简实用的Asp.NetCore模块化框架决定免费开源了
在最近一段时间内,对这个框架新增了以下功能:
1、新增了CMS模块,目前整体都比较简单,适合个人博客使用。
2、新增了AOP缓存,使用AspectCore,缓存可做到Memarycache和redis一件切换。
3、新增AOP事务,服务层和控制器都可以打上特性标签使用。
4、对多租户使用Filter,不管是添加还是更新、查询即可自动赋值。
5、新增七牛云图片上传功能。
6、对于单表的增删改查,在控制器内做了封装,有新的业务按约定建立对应的CRUD实体,一套API自动完成。
7、后台管理新增站群管理。
说了那么多,让我们上点代码和截图来瞧一瞧吧。
AOP缓存
public class CacheInterceptorAttribute : AbstractInterceptorAttribute { private static readonly ConcurrentDictionary<Type, MethodInfo> TypeofTaskResultMethod = new ConcurrentDictionary<Type, MethodInfo>(); readonly int _expireSecond; readonly string _cacheKey; #region 拦截处理 /// <summary> /// 过期时间,单位:分 /// </summary> /// <param name="expireMin"></param> public CacheInterceptorAttribute(string cacheKey = null, int expireMin = -1) { _expireSecond = expireMin * 60; _cacheKey = cacheKey; } public async override Task Invoke(AspectContext context, AspectDelegate next) { try { string key = string.Empty; //自定义的缓存key不存在,再获取类名+方法名或类名+方法名+参数名的组合式key if (!string.IsNullOrEmpty(_cacheKey)) { key = _cacheKey; } else { key = GetKey(context.ServiceMethod, context.Parameters); } var returnType = GetReturnType(context); var cache = context.ServiceProvider.GetService<ICacheHelper>(); if (!cache.Exists(key)) { return; } var strResult = cache.Get<string>(key); var result = JsonConvert.DeserializeObject(strResult, returnType); if (result != null) { context.ReturnValue = ResultFactory(result, returnType, context.IsAsync()); } else { result = await RunAndGetReturn(context, next); if (_expireSecond > 0) { cache.Set(key, result, TimeSpan.FromMinutes(_expireSecond)); } else { cache.Set(key, result); } } } catch (Exception e) { Console.WriteLine(e.Message); } } private static string GetKey(MethodInfo method, object[] parameters) { return GetKey(method.DeclaringType.Name, method.Name, parameters); } private static string GetKey(string className, string methodName, object[] parameters) { var paramConcat = parameters.Length ==