做个简单的RSS订阅(ASP.NET Core),节省自己的时间
0x01 前言
虽说现在有很多软件也可以订阅一些自己喜欢的新闻,要安装到手机,还是挺麻烦的。所以就突发奇想,把一些新闻资源
整合一下,省时省力,就根据RSS订阅,用h5结合ASP.NET Core做个小站点,方便一下自己,顺便拿dotNET Core练练手。
开发环境:win10+vs2015+sqlite+redis(windows)
部署环境:centos7+.net core sdk+jexus+redis(linux)
0x02 开发
由于数据量不会大,所以就选用了sqlite,用起来还是挺方便的。
RSS的内容都是来自各大新闻网站,不能每次访问都去请求一次,所以要缓存起来。
数据库操作选择Dapper、UI框架选择了jquery-weui、还用到了一个js模板引擎art-template。
单元测试用的xUnit.net。
为了创建项目时,不添加太多东西,所以我是用Xamarin Studio建的项目,然后在VS2015上开发,
需要什么东西,自己在添加上去,按需加载。下面是整体结构图:

所以就简单用XDocument去处理这些内容:
public async Task<IList<Models.Item>> GetItems(string url, int count)
{
string xmlStr = await GetXMLStringByUrl(url);
XDocument doc = XDocument.Parse(xmlStr);
//the channel image
string imgUrl = doc.Element("rss").Element("channel").Element("image").Element("url").Value;
//the rss item
var results = doc.Element("rss").Element("channel").Elements("item").Select(x => new Models.Item
{
title = x.Element("title").Value,
link = x.Element("link").Value,
description = x.Element("description").Value,
pubDate = x.Element("pubDate").Value,
guid = x.Element("guid").Value,
ImgUrl = imgUrl
}); return results.Take(count).ToList();
}
在处理依赖注入时,用的是微软自家的,并没有用Autofac,具体如下。
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
services.AddScoped<IRSSItemRepository, RSSItemRepository>();
services.AddScoped<IUserRepository, UserRepository>();
services.AddScoped<IRSSSourceRepository, RSSSourceRepository>();
//the cache
services.AddScoped<ICache, RedisCache>();
}
开发的时候,由于要用到redis,我本人是在电脑上装了一个windows版本的,方便调试。
操作用的是StackExchange.Redis,自己曾简单封装了一些基本用法,不过这个还不是正式版。

其他部分应该都是比较简单,所以就不说明了。
下面来看看在CentOS7下部署。
0x03 部署
上一篇来份dotNETCore尝尝,用到的部署方式是纯粹的.NET Core SDK的方式。
今天换一种方式来试试用Jexus+.NET Core SDK来部署(当然,也有不安装.NET Core的部署方式)。
先把刚才的项目发布一下:

这个程序集是不是太多了啊,希望微软能在下一版本改进一下这个。
在jexus下面的siteconf文件夹添加一个配置easyrss

多加了一行AppHost,就可以让jexus支持asp.net core了,更多关于这个的介绍可以参考http://linuxdot.net/bbsfile-4459
加上这一句之后,启动这个网站就可以了。
AppHost={CmdLine=dotnet /var/www/easyrss/Catcher.EasyRSS.WebSite.dll;AppRoot=/var/www/easyrss;port=5000}
启动easyrss这个网站:./jws start easyrss
还有重要的一步,启动redis,不然死活都跑不起来。
启动redis: ./redis-server
打开浏览器就能看到效果了

操作相当的简单吧。赶紧动手试试吧。
再放几张效果图(毕竟也花了大半天时间)


0x04 总结
1、部署成功后遇到过一个问题,样式和脚本无法正常加载。请求外网的资源比较耗时(网络渣),只好将生产环境的样式
换成本地加载了,然后就正常了。

2、ASP.NET Core和ASP.NET MVC在开发的时候,没有太大的区别,应该是很容易过渡的,应该慢慢的也会有更多的用dotNET Core来开发了。
做个简单的RSS订阅(ASP.NET Core),节省自己的时间的更多相关文章
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
C#实现多级子目录Zip压缩解压实例 参考 https://blog.csdn.net/lki_suidongdong/article/details/20942977 重点: 实现多级子目录的压缩, ...
- 采用最简单的方式在ASP.NET Core应用中实现认证、登录和注销
在安全领域,认证和授权是两个重要的主题.认证是安全体系的第一道屏障,是守护整个应用或者服务的第一道大门.当访问者请求进入的时候,认证体系通过验证对方的提供凭证确定其真实身份.认证体系只有在证实了访问者 ...
- [争什么! 掺在一起做撒尿牛丸啊! 笨蛋]ASP.NET Core 2.0 + EF6 + Linux +MySql混搭
好消息!特好消息!同时使用ASP.NET Core 2.0和.NET Framework类库还能运行在linux上的方法来啦! 是的,你没有看错!ASP.NET Core 2.0,.NET Frame ...
- 如何在 ASP.NET Core 测试中操纵时间?
有时候,我们会遇到一些跟系统当前时间相关的需求,例如: 只有开学季才允许录入学生信息 只有到了晚上或者周六才允许备份博客 注册满 3 天的用户才允许进行一些操作 某用户在 24 小时内被禁止发言 很显 ...
- asp.net core json返回的时间格式出现T 如何解决
可以在sturap里面 修改配置日期返回的格式 // services.AddMvc(); services.AddMvc().AddJsonOptions(options => { optio ...
- ASP.NET Core webapi json 返回时间格式问题
网站找了几个方案不好使,比如: 1: services.AddMvc().AddJsonOptions(opt => { opt.SerializerSettings.DateFormatStr ...
- sql server 关于表中只增标识问题 C# 实现自动化打开和关闭可执行文件(或 关闭停止与系统交互的可执行文件) ajaxfileupload插件上传图片功能,用MVC和aspx做后台各写了一个案例 将小写阿拉伯数字转换成大写的汉字, C# WinForm 中英文实现, 国际化实现的简单方法 ASP.NET Core 2 学习笔记(六)ASP.NET Core 2 学习笔记(三)
sql server 关于表中只增标识问题 由于我们系统时间用的过长,数据量大,设计是采用自增ID 我们插入数据的时候把ID也写进去,我们可以采用 关闭和开启自增标识 没有关闭的时候 ,提示一下错 ...
- Api网关Kong集成Consul做服务发现及在Asp.Net Core中的使用
写在前面 Api网关我们之前是用 .netcore写的 Ocelot的,使用后并没有完全达到我们的预期,花了些时间了解后觉得kong可能是个更合适的选择. 简单说下kong对比ocelot打动我的 ...
- 企业应用向ASP.NET Core迁移
有人说.NET在国内的氛围越来越不行了,看博客园文章的浏览量也起不来.是不是要转Java呢? 没有必要扯起语言的纷争,Java也好C#都只是语言是工具,各有各的使用场景.以前是C#非开源以及不能在Li ...
随机推荐
- Canvas绘图之平移translate、旋转rotate、缩放scale
画布操作介绍 画布绘图的环境通过translate(),scale(),rotate(), setTransform()和transform()来改变,它们会对画布的变换矩阵产生影响. 函数 方法 描 ...
- spring源码分析之freemarker整合
FreeMarker是一款模板引擎: 即一种基于模板和要改变的数据, 并用来生成输出文本(HTML网页.电子邮件.配置文件.源代码等)的通用工具. 它不是面向最终用户的,而是一个Java类库,是一款程 ...
- iOS UITableView 与 UITableViewController
很多应用都会在界面中使用某种列表控件:用户可以选中.删除或重新排列列表中的项目.这些控件其实都是UITableView 对象,可以用来显示一组对象,例如,用户地址薄中的一组人名.项目地址. UITab ...
- [算法]——快速排序(Quick Sort)
顾名思义,快速排序(quick sort)速度十分快,时间复杂度为O(nlogn).虽然从此角度讲,也有很多排序算法如归并排序.堆排序甚至希尔排序等,都能达到如此快速,但是快速排序使用更加广泛,以至于 ...
- Tableau未必最佳,国内BI也能突破重围!
如今,百度一下商业智能或BI工具,总能看到Tableau的身影.并不是Tableau的营销做得好,而是国内对于商业智能工具的认知和选择似乎都落在了Tableau身上.导致不管业内业外都对商业智能的概念 ...
- 【干货分享】流程DEMO-制度发文和干部任免
流程名: 制度发文和干部任免 业务描述: 当员工在该出勤的工作日出勤但漏打卡时,于一周内填写补打卡申请. 流程相关文件: 流程包.xml 流程说明: 直接导入流程包文件,即可使用本流程 表单: ...
- Windows Server 2008 R2常规安全设置及基本安全策略
这篇文章主要介绍了Windows Web Server 2008 R2服务器简单安全设置,需要的朋友可以参考下 用的腾讯云最早选购的时候悲催的只有Windows Server 2008 R2的系统,原 ...
- .NET跨平台:在CentOS上编译dnx并运行ASP.NET 5示例程序
在之前的博文中我们在 Ubuntu 上成功编译出了 dnx ,并且用它成功运行了 ASP.NET 5 示例程序.在这篇博文中我们将 Ubuntu 换成 CentOS. 目前 dnx 的编译需要用到 m ...
- Angular2笔记:NgModule
Angular的模块的目的是用来组织app的逻辑结构. 在ng中使用@NgModule修饰的class就被认为是一个ng module.NgModule可以管理模块内部的Components.Dire ...
- BoneCP 升级遇到的问题
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [c ...