aspnetcore 实现简单的伪静态化功能

 更新时间:2019年07月12日 08:48:57   作者:Love it or leave it  
这篇文章主要介绍了aspnetcore 实现简单的伪静态化功能,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

Intro

在我的活动室预约项目中,有一个公告模块,类似于新闻发布,个人感觉像新闻这种网页基本就是发布的时候编辑一次之后就再也不会改了,最适合静态化了, 静态化之后用户请求的就是静态文件基本不再需要服务器端查询数据库甚至服务器端渲染,可以一定程度上提升服务器的处理能力以及优化用户体验,而且这种静态化的url对 SEO 比较友好。

由于我的这个项目正在开发中,迁移起来不太方便,所以使用的是伪静态化,看上去是访问的 *.html,实际上并不是 html,而是需要服务器处理的。

GetStarted

配置路由信息,注意顺序,伪静态的路由要在默认路由之前

app.UseMvc(routes =>
{
  routes.MapRoute("Notice", "/Notice/{path}.html", new
  {
    controller = "Home",
    action = "NoticeDetails"
  });

  routes.MapRoute(name: "areaRoute",
    template: "{area:exists}/{controller=Home}/{action=Index}");

  routes.MapRoute(
    name: "default",
    template: "{controller=Home}/{action=Index}");
});

控制器代码:

/// <summary>
/// 公告详情
/// </summary>
/// <param name="path">访问路径</param>
/// <returns></returns>
public async Task<ActionResult> NoticeDetails(string path)
{
  if (string.IsNullOrWhiteSpace(path))
  {
    return RedirectToAction("Notice");
  }
  try
  {
    var noticeBll = HttpContext.RequestServices.GetService<IBLLNotice>();
    var notice = await noticeBll.FetchAsync(n => n.NoticeCustomPath == path.Trim());
    if (notice != null)
    {
      notice.NoticeVisitCount += 1;
      await noticeBll.UpdateAsync(notice, x => x.NoticeVisitCount);

      return View(notice);
    }
    else
    {
      return RedirectToAction("Notice");
    }
  }
  catch (Exception ex)
  {
    Logger.Error(ex);
    throw;
  }
}

实际效果:

https://reservation.weihanli.xyz/Notice/test-notice.html

notice details

Q&A

Q:为什么我们要做(伪)静态化?

A:站点下的 *.html 文件有利于网站的 SEO 优化,有利于百度和google爬虫爬你的网站,SEO做的好有利于提高搜索排名【SEO的水也很深、感兴趣的可以自己找资料研究】。

Q:什么是伪静态化?什么是完全静态化?他们的区别是什么?

A:伪静态化是针对完全静态化来说的,(完全)静态化是会实际保存内容到一个 *.html 文件中,而伪静态化则是通过服务器端技术通过匹配 url 符合一定的模式就重新交给指定的程序处理并返回内容。

简单来说,(完全)静态化会有一个实际存在的静态文件,伪静态化则不存在,需要较多服务器端的处理。

Q:伪静态化和完全静态化哪个好?

A:这个问题更好的问法应该是这样的:“什么时候适合用伪静态化?什么时候适合用完全静态化?”,一个事物既然存在就必然有它存在的道理,存在即合理,如果没有存在的意义必将死去。

完全静态化一般会根据一个模板生成一个实际存在的 *.html 文件,完全静态化不需要太多的服务器端处理,客户端请求这个文件时因为是一个静态文件服务器会直接将文件内容返回给客户端,不需要额外的服务器处理。
 完全静态化会减少服务器的压力。

伪静态化服务器上并没有静态 *.html文件,只是在服务器断使用了Rewrite,将动态URL进行重写,使动态URL表现为静态URL,以满足网页URL静态需求但网页依然为动态调用的,,是需要很多服务器端处理的,比如url的模式匹配,从数据库中查询数据。

总结:虽然完全静态化URL的网页有打开速度快的优点,但是网站内容巨大的话,势必会使网站的体积变大很多,会有很多的静态化文件,网站迁移的话很麻烦,另一方面如果网站内容很多的时候修改模板的话,再次静态化的时候会是一个比较大的工作量。实际使用的话还是需要根据自己实际需要来选取。

Reference

https://github.com/WeihanLi/ActivityReservation/blob/dev/ActivityReservation

总结

以上所述是小编给大家介绍的aspnetcore 实现简单的伪静态化 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

相关文章

  • .NET Core Web APi大文件分片上传研究实现

    .NET Core Web APi大文件分片上传研究实现

    这篇文章主要介绍了.NET Core Web APi大文件分片上传研究实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 使用asp.net改变图片颜色如灰色的变成彩色

    使用asp.net改变图片颜色如灰色的变成彩色

    在网站上改变图片的颜色,比如灰色的变成彩色,彩色的变成灰色,下面是经过测试可行的解决方案
    2014-09-09
  • asp.net DataGrid控件中弹出详细信息窗口

    asp.net DataGrid控件中弹出详细信息窗口

    在DataGrid控件里单击某一行的超级链接时,弹出一个新的页面显示出该行的详细信息
    2008-12-12
  • asp.net操作过程中常见错误的解决方法

    asp.net操作过程中常见错误的解决方法

    这篇文章主要介绍了asp.net操作过程中常见错误的解决方法,主要有IIS无法识别ASP.NET、 SQL Server不允许进行远程连接可能会导致此失败等问题,感兴趣的小伙伴们可以参考一下
    2015-10-10
  • asp.net 控件验证 FCKeditor

    asp.net 控件验证 FCKeditor

    FCKEditor是一个很不错的在线编辑器,可称得上完美,但是它有一个问题,就是在使用RequiredFieldValidator进行验证的时候,即使内容不为空,也需要点击两次才能完成
    2009-06-06
  • asp.net 中文字符串提交乱码的解决方法

    asp.net 中文字符串提交乱码的解决方法

    现在为一家工作室做网站,在登陆模块中涉及到前端页面通过AJAX传递中文的用户名和字母的密码到后台验证,然后再把验证后的信息返回到前端的过程。
    2009-11-11
  • asp.net 不用组件的URL重写(适用于较大型项目)

    asp.net 不用组件的URL重写(适用于较大型项目)

    网上很多关于url重写的教程都推荐下载某某某组件, 我个人不喜欢这样,即使是M$的组件也一样,因为我们干程序员的,越贴近真相越好。那么我也写一个关于url重写的文章,希望对和我一样有个性的coder们有点帮助。
    2009-04-04
  • .NET实现工资管理系统

    .NET实现工资管理系统

    这篇文章主要为大家详细介绍了.NET实现工资管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • asp.net图片上传生成缩略图的注意事项

    asp.net图片上传生成缩略图的注意事项

    asp.net图片上传生成缩略图的注意事项...
    2007-09-09
  • 区分ASP.NET中get方法和post方法

    区分ASP.NET中get方法和post方法

    我们都知道,get是从服务器上获取数据,post是向服务器上传数据。本文主要介绍ASP.NET中get方法和post方法的区别,需要的朋友可以参考下
    2015-10-10

最新评论