很简单的自定义友好链接实现 .net core 2
生活随笔
收集整理的這篇文章主要介紹了
很简单的自定义友好链接实现 .net core 2
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
為什么80%的碼農都做不了架構師?>>> ??
對于現在流行網站來說,內容的訪問路徑只使用 id 已經不能滿足了,以下提供一個簡單的中間件可以自由的用數據庫來自定義網站內容的友好鏈接,此方法完全不需要您再為每個不同的表加友好鏈接字段,通用性更好。
記錄表
/// <summary>/// 短鏈接記錄,對應 shortlinks 表/// </summary>[Table("shortlinks")]public class ShortLink{[Key][StringLength(128)]public string Path { get; set; }[Required][StringLength(1024)]public string Link { get; set; }[StringLength(45)]public string RefType { get; set; }[StringLength(32)]public string RefId { get; set; }public bool Enable { get; set; }}中間件
/// <summary>/// 基于數據庫中 ShortLink 的設置重寫請求/// </summary>class ShortLinkMiddleware{private readonly RequestDelegate _next;private readonly ILogger<ShortLinkMiddleware> _logger;public ShortLinkMiddleware(RequestDelegate next, ILogger<ShortLinkMiddleware> logger){_next = next;_logger = logger;}public async Task InvokeAsync(HttpContext context, IMemoryCache cache){// 從緩存或數據庫中讀取短鏈接對應關系var links = await cache.GetOrCreateAsync(typeof(ShortLinkMiddleware), async e =>{// 設置緩存 15 分鐘e.SetAbsoluteExpiration(TimeSpan.FromMinutes(15));// 獲取數據訪問上下文var db = context.RequestServices.GetRequiredService<AppDbContext>();// 從數據庫讀取啟用狀態的短鏈接return await db.ShortLinks.Where(s=>s.Enable).ToListAsync();});// 獲取當前訪問路徑適配的短鏈接記錄var matchLink = links.FirstOrDefault(l => l.Path == context.Request.Path);if(matchLink != null){// 輸出轉換日志并修改當前請求的 Path_logger.Log(LogLevel.Trace, $"ShortLink {matchLink.Path} To {matchLink.Link}");context.Request.Path = matchLink.Link;}// 調用管道中的下一個委托或中間件await _next(context);}}注冊中間件
在 Startup.cs 的 Configure 方法中加入 app.UseMiddleware<ShortLinkMiddleware>();
轉載于:https://my.oschina.net/jock/blog/1923362
總結
以上是生活随笔為你收集整理的很简单的自定义友好链接实现 .net core 2的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【火炉炼AI】机器学习007-用随机森林
- 下一篇: 我理解的javascript事件循环(一