namespace Yes.Application.Blogs { public record GetSearchViewQuery(NameValueCollection NameValueCollection) : IRequest; public record SearchViewModel( MetaModel Meta, BlogModel Blog, List Categories, List Tags, List Archives, List SinglePages, string Keyword, PagedList Articles ); public class GetSearchViewQueryHandler( IBlogService blogService, IOptionsMonitor options, IMapper mapper) : IRequestHandler { private readonly IBlogService _blogService = blogService; private readonly BlogSettings _settings = options.CurrentValue; private readonly IMapper _mapper = mapper; public async Task Handle(GetSearchViewQuery request, CancellationToken cancellationToken) { var keyword = request.NameValueCollection.QueryString(BlogRouteConst.Keyword); var pageIndex = request.NameValueCollection.QueryInt(BlogRouteConst.PageIndex, 1); var blogModel = _mapper.Map(_settings); var categories = await _blogService.GetAllCategories(); var pages = await _blogService.GetSinglePages(); var tags = await _blogService.GetTags(); var archives = await _blogService.GetArchives(); var articles = await _blogService.GetKeywordArticles(keyword, pageIndex, _settings.PageSizeOfListpage); var meta = GetMeta(_settings, keyword); return new SearchViewModel(meta, blogModel, categories, tags, archives, pages, keyword, articles); } private MetaModel GetMeta(BlogSettings blogSettings, string keyword) { return new MetaModel { Description = blogSettings.Description, Keywords = $"{keyword}", Title = $"包含关键字 {keyword} 的文章 - {blogSettings.Name}", }; } } }