做个简单的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 ...
随机推荐
- Vue.js 2.0 和 React、Augular等其他框架的全方位对比
引言 这个页面无疑是最难编写的,但也是非常重要的.或许你遇到了一些问题并且先前用其他的框架解决了.来这里的目的是看看Vue是否有更好的解决方案.那么你就来对了. 客观来说,作为核心团队成员,显然我们会 ...
- 【踩坑速记】二次依赖?android studio编译运行各种踩坑解决方案,杜绝弯路,总有你想要的~
这篇博客,只是把自己在开发中经常遇到的打包编译问题以及解决方案给大家稍微分享一下,不求吸睛,但求有用. 1.大家都知道我们常常会遇到dex超出方法数的问题,所以很多人都会采用android.suppo ...
- Asp.Net 操作XML文件的增删改查 利用GridView
不废话,直接上如何利用Asp.NET操作XML文件,并对其属性进行修改,刚开始的时候,是打算使用JS来控制生成XML文件的,但是最后却是无法创建文件,读取文件则没有使用了 index.aspx 文件 ...
- C++内联函数
在C语言中,我们使用宏定义函数这种借助编译器的优化技术来减少程序的执行时间,那么在C++中有没有相同的技术或者更好的实现方法呢?答案是有的,那就是内联函数.内联函数作为编译器优化手段的一种技术,在降低 ...
- Jvm 内存浅析 及 GC个人学习总结
从诞生至今,20多年过去,Java至今仍是使用最为广泛的语言.这仰赖于Java提供的各种技术和特性,让开发人员能优雅的编写高效的程序.今天我们就来说说Java的一项基本但非常重要的技术内存管理 了解C ...
- GOF23设计模式归类
创建型模式:-单例模式.工厂模式.抽象工厂模式.建造者模式.原型模式结构型模式:-适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式行为型模式:-模板方法模式.命令模式.迭代器模式 ...
- 高性能 TCP/UDP/HTTP 通信框架 HP-Socket v4.1.1
HP-Socket 是一套通用的高性能 TCP/UDP/HTTP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP/HTTP 通信系统,提供 C/ ...
- javaMail
JavaMail概述: JavaMail是由Sun定义的一套收发电子邮件的API,不同的厂商可以提供自己的实现类.但它并没有包含在JDK中,而是作为JavaEE的一部分. javaMai ...
- BZOJ 1391: [Ceoi2008]order [最小割]
1391: [Ceoi2008]order Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1509 Solved: 460[Submit][Statu ...
- 微软.Net 社区虚拟大会 -- 首日重点(dotnetConf 2016)
6月7日--9日,为期三天的微软.NET社区虚拟大会正式在 Channel9 上召开. 在 Scott Hunter, Miguel de Icaza (Xamarin CTO) , ScottHan ...