加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

一步步开发自己的博客 .NET版(1、基本显示)

发布时间:2020-12-15 21:24:30 所属栏目:asp.Net 来源:网络整理
导读:前言? ? ? ? ? 我们每个猿都有一个搭建自己独立博客的梦,我也不例外。以前想 现在想 以后也想。之所以一直迟迟没有着手,是因为难以跨出第一步。每次心里想着,等我以后技术好了再说,然后就没有然后了。以前用过wordpress,虽然插件很多,不过有时候想改改

前言? ?

? ? ? 我们每个猿都有一个搭建自己独立博客的梦,我也不例外。以前想 现在想 以后也想。之所以一直迟迟没有着手,是因为难以跨出第一步。每次心里想着,等我以后技术好了再说,然后就没有然后了。以前用过wordpress,虽然插件很多,不过有时候想改改自己想要的效果很难,因为 我压根就不会php。也看过.net的一些开源博客,代码量多,看得头晕,没那个耐心。

? ? ? 再说,别人的始终是别人的。得鱼不如得渔。与其花时间去研究php还不如自己写个.net版的。有人说博客园已经很好了啊,我承认确实,而且还可以后台定制自己想要的样式和js。不过始终还是不如自己开发的来得随心所欲。最重要自己开发还可以当作练手 对一个网站的各环节 ?做一次练习,用以发现自己的不足,并加以提升。那我以后的博客写哪里呢?当然还是会继续发博客园,谁叫这里人气旺呢。

? ? 这次开发的博客主要功能或特点:? ? 第一:可以兼容各终端,特别是手机端。? ? 第二:到时会用到大量html5,炫啊。? ? 第三:导入博客园的精华文章,并做分类。(不要封我)? ? 第四:做个插件,任何网站上的技术文章都可以转发收藏 到本博客。

所以打算写个系类:《》

关于域名和空间

? ? ? 在以前我们学C#的想要搭一个免费的博客,要不只能用国外的免费空间要么在linux下用php。用起来都是各种坑,网速各种卡。然后,现在我们学C#的时代来了,这里要感谢阿里云()。当然域名还是要自己买的。?和??可以对比下 ?哪里便宜买哪里,都可以用。(注意:最好买 .com .net .cc .org 因为有些域名不能在阿里备案)。买好域名之后 然后就是备案了,备案也没什么复杂的,阿里自动备案。中间除了 找阿里 要一块免费的布 照个相 寄过去,就是等了,其他的什么也不用做。大概半个月的样子吧。建议 ?买域名的时候最好一次性买久一点,不然后期再续费要比第一次买贵。(如果您实在不想花这个钱,这个我最后给您支个招吧,你申请好免费的主机后,你把主机ip给我,我免费给你二级域名。谁叫我是活雷锋)

开发环境

? ? ? 域名和主机都搞定以后,就开始选择开发环境了。我选的是 vs2013 mvc4 ef6.0 mssql ? 。

博客迁移

? ? ? 然后就是博客迁移,之前也老想着搭建博客,可一直没有行动。这就是从0到1 的难。只要你走出了第一步 后面就 顺畅得多了。那么 我们搭博客 没有测试数据 总还是感觉没什么动力。所以,我就写了个程序,把我在博客园发表的文章扒过去。

? ? ? 那么我们需要哪些数据呢?现在大概想到的有:博客正文、tag标签、文章分类、创建时间、博客标题

? ? ? 好了,那我们就正式开始扒吧。(可以参考我以前的)

? ? ? 首先是从/mvc/blog/sidecolumn.aspx页面取得 文章分类。然后根据 每个类型 的链接 取得这个类型下的所有文章。然后在取正文的时候发现 文章所属tag标签和分类是异步的到页面的, http://www.cnblogs.com/mvc/blog/CategoriesTags.aspx?blogApp=用户名&postId=文章id。(也许博客园有api,我也没去看没去找。)

1.首先建一个实体数据模型

我这里采用的是 model first()?。这里要说明的是 tag标签和文章是多对多的关系,文章类型和文章也是多对多的关系。

2.然后根据模型生成数据库

? ? ? ?个人觉得这里非常爽,自动帮我建好了 主外键 ?和索引,免除了我们自己手动去在数据库里面建。

3.从博客园扒数据

? ? ? ?模型和数据库建好了,那么我们现在就开始迁移吧~下面是全部代码,其中有存数据库的部分可以自己改改。

Import( userName, iszf = blosNumber = = url = + userName + = docment = userid = liS = docment.DocumentNode.SelectNodes( ( item tXPath = href = item.SelectSingleNode(tXPath + ).Attributes[ blogtype = entrylistItem = blogtype.DocumentNode.SelectNodes( ( == entrylistItem) entrylistItem = blogtype.DocumentNode.SelectNodes(); ( == ( typeitem typeitemXPath = typeitemhrefObj = typeitem.SelectSingleNode(typeitemXPath + ( == typeitemhrefObj) typeitemhrefObj = typeitem.SelectSingleNode(typeitemXPath + typeitemhref = typeitemhrefObj.Attributes[; bloghtml = blogcontextobj = bloghtml.DocumentNode.SelectSingleNode(); (blogcontextobj == ) ; blogcontext = blogtitle = bloghtml.DocumentNode.SelectSingleNode( blogurl = bloghtml.DocumentNode.SelectSingleNode().Attributes[ blogtypetagurl = + userName + + userid + +) + ,typeitemhref.LastIndexOf() - typeitemhref.LastIndexOf() - blogtag = jsonobj = jss.Deserialize,>> ( ==; tagSplit = jsonobj[].Split( blogtagid = List<> ( i = ; i < tagSplit.Length; i++ (tagSplit[i].Length >= && tagSplit[i].LastIndexOf() >= blogtagname = tagSplit[i].Substring(tagSplit[i].IndexOf() + ,tagSplit[i].LastIndexOf() - tagSplit[i].IndexOf() - categoriesSplit = jsonobj[].Split( blogtypeid = List<> ( i = ; i < categoriesSplit.Length; i++ (categoriesSplit[i].Length >= && categoriesSplit[i].LastIndexOf() >= blogtypename = categoriesSplit[i].Substring(categoriesSplit[i].IndexOf() + ,categoriesSplit[i].LastIndexOf() - categoriesSplit[i].IndexOf() - blogtimeobj = bloghtml.DocumentNode.SelectSingleNode( blogtime = ( !== BlogsBLL blog </span>= <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; BlogsBLL(); </span><span style="color: #0000ff;"&gt;var</span> myBlogTags = <span style="color: #0000ff;"&gt;new</span> BlogTagsBLL().GetList(t => blogtagid.Contains(t.Id),isAsNoTracking: <span style="color: #0000ff;"&gt;false</span>).ToList();<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;.ToList(); </span> <span style="color: #0000ff;"&gt;var</span> myBlogTypes = <span style="color: #0000ff;"&gt;new</span> BLL.BlogTypesBLL().GetList(t => blogtypeid.Contains(t.Id),isAsNoTracking: <span style="color: #0000ff;"&gt;false</span>).ToList();<span style="color: #008000;"&gt;//</span><span style="color: #008000;"&gt;.ToList();</span> <span style="color: #0000ff;"&gt;try</span><span style="color: #000000;"&gt; { </span><span style="color: #0000ff;"&gt;var</span> modelMyBlogs = <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; ModelDB.Blogs() { BlogContent </span>=<span style="color: #000000;"&gt; blogcontext,BlogCreateTime </span>=<span style="color: #000000;"&gt; blogtime,BlogTitle </span>=<span style="color: #000000;"&gt; blogtitle,BlogUrl </span>=<span style="color: #000000;"&gt; blogurl,IsDel </span>= <span style="color: #0000ff;"&gt;false</span><span style="color: #000000;"&gt;,BlogTags </span>=<span style="color: #000000;"&gt; myBlogTags,BlogTypes </span>=<span style="color: #000000;"&gt; myBlogTypes,UsersId </span>=<span style="color: #000000;"&gt; GetUserId(userName),BlogForUrl </span>=<span style="color: #000000;"&gt; blogurl,IsForwarding </span>= iszf == <span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;checked</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt; }; blog.Add(modelMyBlogs); blog.save(); blosNumber</span>++<span style="color: #000000;"&gt;; } </span><span style="color: #0000ff;"&gt;catch</span><span style="color: #000000;"&gt; (Exception) { </span><span style="color: #0000ff;"&gt;throw</span><span style="color: #000000;"&gt;; } } } </span><span style="color: #0000ff;"&gt;if</span> (blosNumber > <span style="color: #800080;"&gt;0</span><span style="color: #000000;"&gt;) </span><span style="color: #0000ff;"&gt;return</span> <span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;成功导入</span><span style="color: #800000;"&gt;"</span> + blosNumber + <span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;篇Blog</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;return</span> <span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;ok</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;; } </span><span style="color: #0000ff;"&gt;private</span> <span style="color: #0000ff;"&gt;int</span> GetTagId(<span style="color: #0000ff;"&gt;string</span> tagname,<span style="color: #0000ff;"&gt;string</span><span style="color: #000000;"&gt; userName) { BlogTagsBLL blogtag </span>= <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; BlogTagsBLL(); </span><span style="color: #0000ff;"&gt;try</span><span style="color: #000000;"&gt; { </span><span style="color: #0000ff;"&gt;var</span> blogtagmode = blogtag.GetList(t => t.TagName ==<span style="color: #000000;"&gt; tagname); </span><span style="color: #0000ff;"&gt;if</span> (blogtagmode.Count() >= <span style="color: #800080;"&gt;1</span><span style="color: #000000;"&gt;) </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; blogtagmode.FirstOrDefault().Id; </span><span style="color: #0000ff;"&gt;else</span><span style="color: #000000;"&gt; { blogtag.Add(</span><span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; ModelDB.BlogTags() { TagName </span>=<span style="color: #000000;"&gt; tagname,UsersId </span>=<span style="color: #000000;"&gt; GetUserId(userName) }); blogtag.save(); </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; GetTagId(tagname,userName); } } </span><span style="color: #0000ff;"&gt;catch</span><span style="color: #000000;"&gt; (Exception) { </span><span style="color: #0000ff;"&gt;return</span> -<span style="color: #800080;"&gt;1</span><span style="color: #000000;"&gt;; } } </span><span style="color: #0000ff;"&gt;private</span> <span style="color: #0000ff;"&gt;int</span> GetTypeId(<span style="color: #0000ff;"&gt;string</span> typename,<span style="color: #0000ff;"&gt;string</span><span style="color: #000000;"&gt; userName) { BlogTypesBLL blogtype </span>= <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; BlogTypesBLL(); </span><span style="color: #0000ff;"&gt;var</span> blogtagmode = blogtype.GetList(t => t.TypeName ==<span style="color: #000000;"&gt; typename); </span><span style="color: #0000ff;"&gt;if</span> (blogtagmode.Count() >= <span style="color: #800080;"&gt;1</span><span style="color: #000000;"&gt;) </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; blogtagmode.FirstOrDefault().Id; </span><span style="color: #0000ff;"&gt;else</span><span style="color: #000000;"&gt; { blogtype.Add(</span><span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; ModelDB.BlogTypes() { TypeName </span>=<span style="color: #000000;"&gt; typename,CreateTime </span>=<span style="color: #000000;"&gt; DateTime.Now,UsersId </span>=<span style="color: #000000;"&gt; GetUserId(userName) }); blogtype.save(); </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; GetTypeId(typename,userName); } } </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<summary></span> <span style="color: #808080;"&gt;///</span><span style="color: #008000;"&gt; 获取haojima用户id </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;</summary></span> <span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<param name="userName"&gt;</param></span> <span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<returns></returns></span> <span style="color: #0000ff;"&gt;private</span> <span style="color: #0000ff;"&gt;int</span> GetUserId(<span style="color: #0000ff;"&gt;string</span><span style="color: #000000;"&gt; userName) { BlogUsersBLL user </span>= <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; BlogUsersBLL(); </span><span style="color: #0000ff;"&gt;var</span> blogtagmode = user.GetList(t => t.UserName ==<span style="color: #000000;"&gt; userName); </span><span style="color: #0000ff;"&gt;if</span> (blogtagmode.Count() >= <span style="color: #800080;"&gt;1</span><span style="color: #000000;"&gt;) </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; blogtagmode.FirstOrDefault().Id; </span><span style="color: #0000ff;"&gt;else</span><span style="color: #000000;"&gt; { user.Add(</span><span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; ModelDB.BlogUsers() { UserName </span>=<span style="color: #000000;"&gt; userName,UserPass </span>= <span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;admin</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;,UserNickname </span>=<span style="color: #000000;"&gt; userName }); user.save(); </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; GetUserId(userName); } } </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<summary></span> <span style="color: #808080;"&gt;///</span><span style="color: #008000;"&gt; 检查 这个 url地址 是否被添加过 </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;</summary></span> <span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<param name="url"&gt;</param></span> <span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<returns></returns></span> <span style="color: #0000ff;"&gt;private</span> <span style="color: #0000ff;"&gt;bool</span> IsAreBlog(<span style="color: #0000ff;"&gt;string</span><span style="color: #000000;"&gt; url) { BLL.BlogsBLL blog </span>= <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; BLL.BlogsBLL(); </span><span style="color: #0000ff;"&gt;var</span> blogs = blog.GetList(t => t.BlogUrl ==<span style="color: #000000;"&gt; url); </span><span style="color: #0000ff;"&gt;return</span> blogs.Count() >= <span style="color: #800080;"&gt;1</span><span style="color: #000000;"&gt;; } </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<summary></span> <span style="color: #808080;"&gt;///</span><span style="color: #008000;"&gt; 获取cnblog用户id </span><span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;</summary></span> <span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<param name="url"&gt;</param></span> <span style="color: #808080;"&gt;///</span> <span style="color: #808080;"&gt;<returns></returns></span> <span style="color: #0000ff;"&gt;private</span> <span style="color: #0000ff;"&gt;string</span> GetCnblogUserId(<span style="color: #0000ff;"&gt;string</span><span style="color: #000000;"&gt; url) { HtmlAgilityPack.HtmlWeb htmlweb </span>= <span style="color: #0000ff;"&gt;new</span><span style="color: #000000;"&gt; HtmlAgilityPack.HtmlWeb(); </span><span style="color: #0000ff;"&gt;var</span> docment = htmlweb.Load(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;http://www.cnblogs.com/</span><span style="color: #800000;"&gt;"</span> +<span style="color: #000000;"&gt; url); </span><span style="color: #0000ff;"&gt;var</span> list = docment.DocumentNode.SelectNodes(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;//link[@rel='stylesheet']</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;); </span><span style="color: #0000ff;"&gt;foreach</span> (<span style="color: #0000ff;"&gt;var</span> item <span style="color: #0000ff;"&gt;in</span><span style="color: #000000;"&gt; list) { </span><span style="color: #0000ff;"&gt;if</span> (<span style="color: #0000ff;"&gt;null</span> != item.Attributes &amp;&amp; item.Attributes.Contains(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;href</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;)) { </span><span style="color: #0000ff;"&gt;var</span> href = item.Attributes[<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;href</span><span style="color: #800000;"&gt;"</span><span style="color: #000000;"&gt;].Value; href </span>= href.Substring(href.LastIndexOf(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;/</span><span style="color: #800000;"&gt;"</span>) + <span style="color: #800080;"&gt;1</span>,href.IndexOf(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;.</span><span style="color: #800000;"&gt;"</span>) - href.LastIndexOf(<span style="color: #800000;"&gt;"</span><span style="color: #800000;"&gt;/</span><span style="color: #800000;"&gt;"</span>) - <span style="color: #800080;"&gt;1</span><span style="color: #000000;"&gt;); </span><span style="color: #0000ff;"&gt;int</span> userid = -<span style="color: #800080;"&gt;1</span><span style="color: #000000;"&gt;; </span><span style="color: #0000ff;"&gt;if</span> (<span style="color: #0000ff;"&gt;int</span>.TryParse(href,<span style="color: #0000ff;"&gt;out</span><span style="color: #000000;"&gt; userid)) </span><span style="color: #0000ff;"&gt;return</span><span style="color: #000000;"&gt; userid.ToString(); } } </span><span style="color: #0000ff;"&gt;return</span> <span style="color: #800000;"&gt;""</span><span style="color: #000000;"&gt;; }</span></pre>

页面布局

? ? ? 关于页面布局 ,怎样简单怎样来。我是分成了 头、尾、中间。中间二八分。这个不重要,现在暂时这么遭。以后再考虑 多终端的兼容。

数据加载

? ? ? ?现在数据都已经迁移过来的,需要展示在我们自己搭建的博客,我想对于大家来书应该没什么难度。从学编程开始,老师就教我们 增删改查。只是美与丑的问题。

? ? ? ?这里有一点要注意,因为正文内容保存到数据库的都是html代码,而我们要在首页展示文章列表只显示小部分内容,那怎么截取字符串呢?你不能保证刚好是在html标签结尾后截取啊。我这里用到了HtmlAgilityPack取InnerText 的属性。就像jqeruy中 .html() 和 .text()区别,如果截图断了html标签 显示 将会很混乱。? ? ? ?

最后总结

? ? ? 这个博客我也才刚开始做,现有也仅仅只是实现了博客的展示功能,连分页都还没有去实现。所以本系列博客更新会比较慢。我也需要边做边学边更新,工作中还没用过MVC。

到最后等我做完了,我会放git上开源,到时候大家有兴趣的可以一起来完善和定制自己想要的效果。

? ? ? ?说了这么多来张效果图吧。

? ? ? ?

? ? ?

如果您对本篇文章感兴趣,那就麻烦您点个赞,您的鼓励将是我的动力。?当然您还可以加入QQ群:嗨 博客讨论。

演示地址:

原文链接:?

一步步开发自己的博客 .NET版系列:

开源地址:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读