前言 在之前鼓搗過一次基礎工程 April.WebApi 後,就考慮把常用的類庫打包做成一個公共類庫,這樣既方便維護也方便後續做快速開發使用,倉庫地址: "April.Util_github" , "April.Util_gitee" ,後續會繼續推出基於Util的基礎工程(包含許可權相關)以及如果代 ...
前言
在之前鼓搗過一次基礎工程April.WebApi後,就考慮把常用的類庫打包做成一個公共類庫,這樣既方便維護也方便後續做快速開發使用,倉庫地址:April.Util_github,April.Util_gitee,後續會繼續推出基於Util的基礎工程(包含許可權相關)以及如果代碼生成器覺得可以了也會推出,先mark不錯過。
April.Util
首先,我們創建一個類庫工程,當然新建之後就是刪掉預設的類,我這裡的版本是netstandard 2.0。
然後我們先縷下之前我做基礎工程時候需要用到的通用型類庫(當然後續會一直跟進補充)。
- 通用配置 AprilConfig,AprilEnums
- 緩存相關 CacheUtil,CookieUtil,SessionUtil,RedisUtil
- 日誌相關 LogUtil
- 路徑請求相關 UriUtil
- 回調相關 ResponseUtil
- 時間處理相關 DateUtil
- 驗證碼相關 CodeUtil
- 管理員相關 TokenUtil 整理中
- 加密相關 EncrypUtil
- Aop相關 AprilLogAttribute
- 其他擴展類
- 未完待續
我們所需要引入的NuGet包,儘可能的節省新工程需要引入的類庫,這樣統一類庫環境,方便多工程簡單部署問題,當然也可以只引入dll文件,自己在工程中引入需要的環境類庫,引入類庫列表。
- log4net
- Microsoft.AspNetCore.Http.Abstractions
- Microsoft.AspNetCore.Http.Extensions
- Microsoft.AspNetCore.Mvc.Abstractions
- Microsoft.AspNetCore.Session
- Microsoft.Extensions.Caching.Memory
- Microsoft.Extensions.Configuration
- Newtonsoft.Json
- QRCoder
- StackExchange.Redis
- System.Drawing.Common
- 未完待續
當然其中可能大多在WebApi工程中已經存在或是需要引用,這裡存在重覆引入的可能,所以需要關註版本問題,但是目前是會根據新版本的穩定版來統一版本問題。
代碼可直接從倉庫拉取,地址也在開頭給出,生成工程之後我們可以得到一個dll文件,就如我前面所說,你可以引入dll文件然後在自己工程打入需要的環境包,也可以發佈一個NuGet包,直接引入April.Util。
打包帶走
首先,右鍵Util選擇屬性,切換到打包界面。
之後我們來發佈當前類庫工程,發佈的過程這裡就不再多說了,之後我們根據路徑來找到我們發佈的類庫。
本地使用
如果只是本地自己用的話,也不想發佈為公開,可以通過配置NuGet包的地址來獲取我們自己的NuGet包。
之後,我們就可以獲取我們自己的NuGet了。
發佈NuGet
當然你可以選擇發佈到NuGet倉庫,登錄NuGet官網,如果沒有賬號需要註冊個google賬號。
登錄之後,在我們頭像下選擇上傳包。
選擇文件,拉到最下麵(當然你可以一路看看相關的參數),然後最終的Submit,之後我們就可以看到已經上傳成功,但是檢索需要等待個把小時,上傳的包應該是沒法刪除,所以這點兒需要註意。
示例
在代碼倉庫中我連帶有個Simple的WebApi,裡面引入了Util,包括一些其他的常規使用方法,特別註意下入口文件Startup,當然這個工程後續也是會不斷的完善的,至於更新的力度以及代碼規範度,emm,個人的力量還是有限,希望也能有更多的人可以一起探討。
Startup
public Startup(IConfiguration configuration)
{
Configuration = configuration;
AprilConfig.Configuration = configuration;
LogUtil.InitLog();
RedisUtil.InitRedis();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
AprilConfig.ServiceProvider = app.ApplicationServices;
}
/// <summary>
/// 示例獲取
/// </summary>
/// <returns></returns>
[HttpGet]
[AprilLog]
public ResponseDataEntity Get()
{
var rng = new Random();
var data = Enumerable.Range(1, 2).Select(index => new WeatherForecast
{
Date = DateTime.Now.AddDays(index),
TemperatureC = rng.Next(-20, 55),
Summary = Summaries[rng.Next(Summaries.Length)],
Timestamp = (int)DateUtil.ConvertToUnixTimestamp(DateTime.Now.AddDays(index))
})
.ToList();
return ResponseUtil.Success("", data);
}
/// <summary>
/// 驗證碼
/// </summary>
/// <param name="type">是否畫線</param>
/// <returns></returns>
[HttpGet]
[Route("Code")]
public FileContentResult Code(int type)
{
string code = CodeUtil.GetSingleObj().CreateVerifyCode(CodeUtil.VerifyCodeType.MixVerifyCode, 6);
//LogUtil.Info($"生成6位驗證碼:{code}");
bool isAddLines = false;
if (type == 1)
{
isAddLines = true;
}
var bitmap = CodeUtil.GetSingleObj().CreateBitmapByImgVerifyCode(code, 100, 40, isAddLines);
code = EncryptUtil.EncryptDES(code, AprilConfig.SecurityKey);
CookieUtil.AddString("code", code, 5);
MemoryStream stream = new MemoryStream();
bitmap.Save(stream, ImageFormat.Gif);
return File(stream.ToArray(), "image/gif");
}
小結
路漫漫,小半天的整理,但是前前後後的基礎工程的路淌了好幾版,從netframework到net core,想做一套通用的基礎工程以減少開發工作量,但是這種確實沒有十全十美的,根據業務來設計才是最合適的,但是規範化這點兒不可缺失,就先從Util開始,一點點的領出來,組件化的來開發,相信往後會越來越好,如果有哪些地方不合適,也希望能有大佬給出指點,一人摸索過河,也請見諒。