当前位置: 首页 > news >正文

个人备案网站盈利短链接生成器app

个人备案网站盈利,短链接生成器app,动力 网站建设,手机网站 图标1前言上一篇留的坑#xff0c;火速补上。在之前的第6篇中#xff0c;已经有初步介绍#xff0c;本文做一些补充#xff0c;已经搞定这部分的同学可以快速跳过#xff0c;基于.NetCore开发博客项目 StarBlog - (6) 页面开发之博客文章列表对标准的WebApi来说#xff0c;分…1前言上一篇留的坑火速补上。在之前的第6篇中已经有初步介绍本文做一些补充已经搞定这部分的同学可以快速跳过基于.NetCore开发博客项目 StarBlog - (6) 页面开发之博客文章列表对标准的WebApi来说分页、过滤、搜索、排序是很常见的功能既可以方便用户查看数据又可以提升程序性能。2通用请求参数定义一个类来作为通用的请求参数列表接口通用的参数是这几个PageSize, Page, Search, SortBy反映到URL上就是 Blog/?pageSize10page1search关键词 这样的形式public class QueryParameters {/// summary/// 最大页面条目/// /summarypublic const int MaxPageSize  50;private int _pageSize  10;/// summary/// 页面大小/// /summarypublic int PageSize {get  _pageSize;set  _pageSize  (value  MaxPageSize) ? MaxPageSize : value;}/// summary/// 当前页码/// /summarypublic int Page { get; set; }  1;/// summary/// 搜索关键词/// /summarypublic string? Search { get; set; }/// summary/// 排序字段/// /summarypublic string? SortBy { get; set; } }3文章列表请求参数在通用请求参数 QueryParameters 的基础上派生出文章列表的请求参数类 PostQueryParameterspublic class PostQueryParameters : QueryParameters {/// summary/// 仅请求已发布文章/// /summarypublic bool OnlyPublished { get; set; }  false;/// summary/// 文章状态/// /summarypublic string? Status { get; set; }/// summary/// 分类ID/// /summarypublic int CategoryId { get; set; }  0;/// summary/// 排序字段/// /summarypublic new string? SortBy { get; set; }  -LastUpdateTime; }在通用请求参数的基础上增加文章相关的筛选字段。SortBy 字段使用 new 关键词覆盖基类属性设置为默认排序是最后更新时间前面加个减号表示倒序。4service在 StarBlog.Web/Services/PostService.cs 中封装获取分页列表的方法代码里有注释比较容易根据 PostQueryParameters 中的各种参数来做过滤筛选public IPagedListPost GetPagedList(PostQueryParameters param) {var querySet  _postRepo.Select;// 是否发布if (param.OnlyPublished) {querySet  _postRepo.Select.Where(a  a.IsPublish);}// 状态过滤if (!string.IsNullOrEmpty(param.Status)) {querySet  querySet.Where(a  a.Status  param.Status);}// 分类过滤if (param.CategoryId ! 0) {querySet  querySet.Where(a  a.CategoryId  param.CategoryId);}// 关键词过滤if (!string.IsNullOrEmpty(param.Search)) {querySet  querySet.Where(a  a.Title.Contains(param.Search));}// 排序if (!string.IsNullOrEmpty(param.SortBy)) {// 是否升序var isAscending  !param.SortBy.StartsWith(-);var orderByProperty  param.SortBy.Trim(-);querySet  querySet.OrderByPropertyName(orderByProperty, isAscending);}return querySet.Include(a  a.Category).ToList().ToPagedList(param.Page, param.PageSize); }5搜索的实现在上面 service 的代码中可以看到搜索只是简单的“关键词过滤”使用 Title.Contains(param.Search) 转换成SQL就是select * from post where title like %关键词%单纯判断标题字符串中是否包含有关键词的子串。这对于简单搜索一下文章是够用的如果要像谷歌、百度这类搜索引擎一样能搜到文章的内容需要用上全文检索。现在主流的就是 ElasticSearch 和 Solr后续可以考虑把这个功能加入本项目~PS关于全文检索我之前写过一篇文章全文检索引擎原理以及Lucene简单介绍同时开源了一个玩具级的全文检索引擎https://github.com/Deali-Axy/CloverSearch6分页的实现本项目使用 X.PagedList 来实现分页功能这个组件在结合MVC使用很方便如果纯WebApi的话用数据库自带的分页是更好的选择性能更好。这个分页组件是在 IEnumerableT 上添加了扩展方法 ToPagedList所以在用的时候要先把数据都读取出来再执行分页性能不如在数据库里做好分页再读出来很多ORM都支持这个功能FreeSQL也不例外。用法例子var list  fsql.SelectTopic().Where(a  a.Id  10).Count(out var total) //总记录数量.Page(1, 20).Tolist();详情请查看FreeSQL官方文档https://freesql.net/guide/paging.html用上 X.PagedList 这个组件后在任意 IEnumerableT 对象上执行 ToPagedList 方法可以得到 IPagedListT 对象这个对象处理当前页面的列表数据还有分页信息。为了让前端可以方便的使用这部分信息我又写了个扩展方法。StarBlog.Web/Extensions/PagedListExt.cspublic static class PagedListExt {public static PaginationMetadata ToPaginationMetadata(this IPagedList page) {return new PaginationMetadata {PageCount  page.PageCount,TotalItemCount  page.TotalItemCount,PageNumber  page.PageNumber,PageSize  page.PageSize,HasNextPage  page.HasNextPage,HasPreviousPage  page.HasPreviousPage,IsFirstPage  page.IsFirstPage,IsLastPage  page.IsLastPage,FirstItemOnPage  page.FirstItemOnPage,LastItemOnPage  page.LastItemOnPage};}public static string ToPaginationMetadataJson(this IPagedList page) {return JsonSerializer.Serialize(ToPaginationMetadata(page));} }这样就可以在分页后得到的 IPagedList 对象上执行 ToPaginationMetadata 得到分页元数据了。这个 PaginationMetadata 也是本项目里定义的 ViewModelStarBlog.Web/ViewModels/PaginationMetadata.cs代码如下public class PaginationMetadata {public int PageCount { get; set; }public int TotalItemCount { get; set; }public int PageNumber { get; set; }public int PageSize { get; set; }public bool HasPreviousPage { get; set; }public bool HasNextPage { get; set; }public bool IsFirstPage { get; set; }public bool IsLastPage { get; set; }public int FirstItemOnPage { get; set; }public int LastItemOnPage { get; set; } }搞定7controller与最终效果代码如下[AllowAnonymous] [HttpGet] public ApiResponsePagedPost GetList([FromQuery] PostQueryParameters param) {var pagedList  _postService.GetPagedList(param);return new ApiResponsePagedPost {Message  Get posts list,Data  pagedList.ToList(),Pagination  pagedList.ToPaginationMetadata()}; }获取到分页数据之后输出 ApiResponsePagedT 类型的返回值这个也是我封装的接口返回值类型下一篇文章会详细介绍Data 属性就是列表数据Pagination 属性是分页的信息。请求这个接口返回的效果如下{pagination: {pageCount: 40,totalItemCount: 394,pageNumber: 1,pageSize: 10,hasPreviousPage: false,hasNextPage: true,isFirstPage: true,isLastPage: false,firstItemOnPage: 1,lastItemOnPage: 10},statusCode: 200,successful: true,message: Get posts list,data: [{...},{...},{...},{...},{...}] }8系列文章基于.NetCore开发博客项目 StarBlog - (1) 为什么需要自己写一个博客基于.NetCore开发博客项目 StarBlog - (2) 环境准备和创建项目基于.NetCore开发博客项目 StarBlog - (3) 模型设计基于.NetCore开发博客项目 StarBlog - (4) markdown博客批量导入基于.NetCore开发博客项目 StarBlog - (5) 开始搭建Web项目基于.NetCore开发博客项目 StarBlog - (6) 页面开发之博客文章列表基于.NetCore开发博客项目 StarBlog - (7) 页面开发之文章详情页面基于.NetCore开发博客项目 StarBlog - (8) 分类层级结构展示基于.NetCore开发博客项目 StarBlog - (9) 图片批量导入基于.NetCore开发博客项目 StarBlog - (10) 图片瀑布流基于.NetCore开发博客项目 StarBlog - (11) 实现访问统计基于.NetCore开发博客项目 StarBlog - (12) Razor页面动态编译基于.NetCore开发博客项目 StarBlog - (13) 加入友情链接功能基于.NetCore开发博客项目 StarBlog - (14) 实现主题切换功能基于.NetCore开发博客项目 StarBlog - (15) 生成随机尺寸图片基于.NetCore开发博客项目 StarBlog - (16) 一些新功能 (监控/统计/配置/初始化)基于.NetCore开发博客项目 StarBlog - (17) 自动下载文章里的外部图片基于.NetCore开发博客项目 StarBlog - (18) 实现本地Typora文章打包上传基于.NetCore开发博客项目 StarBlog - (19) Markdown渲染方案探索基于.NetCore开发博客项目 StarBlog - (20) 图片显示优化基于.NetCore开发博客项目 StarBlog - (21) 开始开发RESTFul接口基于.NetCore开发博客项目 StarBlog - (22) 开发博客文章相关接口基于.NetCore开发博客项目 StarBlog - (23) 文章列表接口分页、过滤、搜索、排序
http://www.zqtcl.cn/news/8489/

相关文章:

  • 南宁网站定制开发自己做的网站怎么在百度上搜到
  • 可以做猫头像的网站人工智能工程师月薪多少
  • 学做室内效果图的网站哪个网站做二微码
  • 腾讯云如何建设网站网络项目设计方案
  • 温州市建设安监局网站深圳58同城招聘网最新招聘
  • 简述制作网站的步骤和过程wordpress内网外网访问不了
  • 网站建设300元网站制作课程介绍
  • 网站建设手机源码工商信息查询官网
  • 罗田县住房和城乡建设局网站成都旅游攻略景点必去十处
  • 网站开发对显卡的要求游戏网站怎么建设
  • 网站建设制作 优帮云wordpress 手机版本
  • 网站模板 手机郑州网站建设+论坛
  • 做淘宝客没网站网站站点结构图
  • 贵州安顺做公司网站wordpress 关闭站点
  • logo注册网站WordPress全站广告
  • 网站 备案 哪个省wordpress视频预览插件
  • 手机网站样例商城网站建设自助建站平台
  • 承德微网站建设小学生摘抄新闻
  • 做相册的网站dw天津住房城乡建设网站
  • 广西建设教育网站如何做网站的搜索栏
  • 茂名营销网站开发工作室做网站
  • 公司网站集资网站开发人员犯法么备案网站名称大全
  • dedecms制作网站教程外国自适应企业网站
  • 东莞自助建站平台江门网络培训学院
  • 重庆智能网站建设推荐重庆网站推广运营公司
  • 网站建设的重要性与价值安卓程序下载安装
  • 徐州网站建设策划天圆地方建筑网站
  • 网页制作网站受众群体分析有没有做catalog的网站
  • 网站如何做绿标全自动引流推广软件下载
  • 网站建设属于哪个类目德州金航网站建设