日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(四)

發布時間:2025/1/21 asp.net 69 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(四) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

基于 abp vNext 和 .NET Core 開發博客項目 - 博客接口實戰篇(四)

轉載于:https://github.com/Meowv/Blog

上篇文章完成了文章增刪改的接口和友情鏈接列表的接口,本篇繼續。

善于思考的同學肯定發現,在執行增刪改操作后,Redis緩存中的數據還是存在的,也就意味著查詢接口返回的數據還是舊的,所以在寫接口之前,先完成一下清緩存的操作。

移除緩存

移除緩存我這里找了一個新的包:Caching.CSRedis,選他是因為微軟的包Microsoft.Extensions.Caching.StackExchangeRedis沒有給我們實現批量刪除的功能。

Caching.CSRedis開源地址,https://github.com/2881099/csredis 在這不做過多介紹,感興趣的自己去看。

在.Application.Caching層添加包Caching.CSRedis,Install-Package Caching.CSRedis,然后在模塊類MeowvBlogApplicationCachingModule中進行配置。

//MeowvBlogApplicationCachingModule.cs

public override void ConfigureServices(ServiceConfigurationContext context)
{

var csredis = new CSRedis.CSRedisClient(AppSettings.Caching.RedisConnectionString); RedisHelper.Initialization(csredis);context.Services.AddSingleton<IDistributedCache>(new CSRedisCache(RedisHelper.Instance));

}

直接新建一個移除緩存的接口:ICacheRemoveService,添加移除緩存的方法RemoveAsync()。代碼較少,可以直接寫在緩存基類CachingServiceBase中。

public interface ICacheRemoveService
{
///
/// 移除緩存
///
///
///
///
Task RemoveAsync(string key, int cursor = 0);
}
然后可以在基類中實現這個接口。

public async Task RemoveAsync(string key, int cursor = 0)
{
var scan = await RedisHelper.ScanAsync(cursor);
var keys = scan.Items;

if (keys.Any() && key.IsNotNullOrEmpty()) {keys = keys.Where(x => x.StartsWith(key)).ToArray();await RedisHelper.DelAsync(keys); }

}
簡單說一下這個操作過程,使用ScanAsync()獲取到所有的Redis key值,返回的是一個string數組,然后根據參數找到符合此前綴的所有key,最后調用DelAsync(keys)刪除緩存。

在需要有移除緩存功能的接口上繼承ICacheRemoveService,這里就是IBlogCacheService。

//IBlogCacheService.cs
namespace Meowv.Blog.Application.Caching.Blog
{
public partial interface IBlogCacheService : ICacheRemoveService
{
}
}
在基類中已經實現了這個接口,所以現在所有繼承基類的緩存實現類都可以調用移除緩存方法了。

在MeowvBlogConsts中添加緩存前綴的常量。

//MeowvBlogConsts.cs
///
/// 緩存前綴
///
public static class CachePrefix
{
public const string Authorize = “Authorize”;

public const string Blog = "Blog";public const string Blog_Post = Blog + ":Post";public const string Blog_Tag = Blog + ":Tag";public const string Blog_Category = Blog + ":Category";public const string Blog_FriendLink = Blog + ":FriendLink";

}
然后在BlogService.Admin.cs服務執行增刪改后調用移除緩存的方法。

//BlogService.Admin.cs

// 執行清除緩存操作
await _blogCacheService.RemoveAsync(CachePrefix.Blog_Post);
因為是小項目,采用這種策略直接刪除緩存,這樣就搞定了當在執行增刪改操作后,前臺接口可以實時查詢出最后的結果。

文章詳情

圖片

當我們修改文章數據的時候,是需要把當前數據庫中的數據帶出來顯示在界面上的,因為有可能只是個別地方需要修改,所以這還需要一個查詢文章詳情的接口,當然這里的詳情和前端的是不一樣的,這里是需要根據Id主鍵去查詢。

添加模型類PostForAdminDto.cs,直接繼承PostDto,然后添加一個Tags列表就行,==,好像和上一篇文章中的EditPostInput字段是一模一樣的。順手將EditPostInput改一下吧,具體代碼如下:

//PostForAdminDto.cs
using System.Collections.Generic;

namespace Meowv.Blog.Application.Contracts.Blog
{
public class PostForAdminDto : PostDto
{
///
/// 標簽列表
///
public IEnumerable Tags { get; set; }
}
}

//EditPostInput.cs
namespace Meowv.Blog.Application.Contracts.Blog.Params
{
public class EditPostInput : PostForAdminDto
{
}
}
在IBlogService.Admin.cs中添加接口。

///
/// 獲取文章詳情
///
///
///
Task<ServiceResult> GetPostForAdminAsync(int id);
實現這個接口。

///
/// 獲取文章詳情
///
///
///
public async Task<ServiceResult> GetPostForAdminAsync(int id)
{
var result = new ServiceResult();

var post = await _postRepository.GetAsync(id);var tags = from post_tags in await _postTagRepository.GetListAsync()join tag in await _tagRepository.GetListAsync()on post_tags.TagId equals tag.Idwhere post_tags.PostId.Equals(post.Id)select tag.TagName;var detail = ObjectMapper.Map<Post, PostForAdminDto>(post); detail.Tags = tags; detail.Url = post.Url.Split("/").Where(x => !string.IsNullOrEmpty(x)).Last();result.IsSuccess(detail); return result;

}
先根據Id查出文章數據,再通過聯合查詢找出標簽數據。

CreateMap<Post, PostForAdminDto>().ForMember(x => x.Tags, opt => opt.Ignore());
新建一條AutoMapper配置,將Post轉換成PostForAdminDto,忽略Tags。

然后將查出來的標簽、Url賦值給DTO,輸出即可。在BlogController.Admin中添加API。

///
/// 獲取文章詳情
///
///
///
[HttpGet]
[Authorize]
[Route(“admin/post”)]
[ApiExplorerSettings(GroupName = Grouping.GroupName_v2)]
public async Task<ServiceResult> GetPostForAdminAsync([Required] int id)
{
return await _blogService.GetPostForAdminAsync(id);
}

圖片

至此,完成了關于文章的所有接口。

接下來按照以上方式依次完成分類、標簽、友鏈的增刪改查接口,我覺得如果你有跟著我一起做,剩下的可以自己完成。

開源地址:https://github.com/Meowv/Blog/tree/blog_tutorial

總結

以上是生活随笔為你收集整理的基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(四)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。