做个简单的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 ...
随机推荐
- [APUE]文件和目录(下)
一.mkdir和rmdir函数 #include <sys/types.h> #include <sys/stat.h> int mkdir(const char *pathn ...
- android通过webview调起支付宝app支付
webview在加载网页的时候会默认调起手机自带的浏览器加载网页,用户体验不好.但当用户设置浏览器客户端(setWebViewClient)设置这样的监听事件之后,当请求url的时候就不会打开手机自带 ...
- 谈谈一些有趣的CSS题目(七)-- 消失的边界线问题
开本系列,谈谈一些有趣的 CSS 题目,题目类型天马行空,想到什么说什么,不仅为了拓宽一下解决问题的思路,更涉及一些容易忽视的 CSS 细节. 解题不考虑兼容性,题目天马行空,想到什么说什么,如果解题 ...
- Xamarin+Prism开发详解一:PCL跨平台类库与Profile的关系
在[Xamarin+Prism小试牛刀:定制跨平台Outlook邮箱应用]中提到过以下错误,不知道大伙还记得不: 无法安装程序包"Microsoft.Identity.Client 1.0. ...
- 玩转Vim 编辑器
一:VIM快速入门 1.vim模式介绍 以下介绍内容来自维基百科Vim 从vi演生出来的Vim具有多种模式,这种独特的设计容易使初学者产生混淆.几乎所有的编辑器都会有插入和执行命令两种模式,并且大多数 ...
- wordpress优化之结合prism.js为编辑器自定义按钮转化代码
原文链接 http://ymblog.net/2016/07/24/wordpress-prism/ 继昨天花了一天一夜的时间匆匆写了主题Jiameil3.0之后,心中一直在想着优化加速,体验更好,插 ...
- Lind.DDD.LindAspects方法拦截的介绍
回到目录 什么是LindAspects 之前写了关于Aspects的文章<Lind.DDD.Aspects通过Plugins实现方法的动态拦截~Lind里的AOP>,今天主要在设计思想上进 ...
- HTML 5 应用程序缓存manifest
什么是应用程序缓存(Application Cache)? HTML5 引入了应用程序缓存,这意味着 web 应用可进行缓存,并可在没有因特网连接时进行访问. 应用程序缓存为应用带来三个优势: 离线浏 ...
- BPM配置故事之案例11-操作外部数据源
小明:可以获取ERP数据了-- 老李:哦,这么快?小伙子,我非常看好你,来来,别急着走,再陪我聊会-- 小明:--您老人家不是又要改流程吧? 老李:没有没有,哎嘿嘿嘿,我们这不都是为公司效率着想嘛,这 ...
- Linux实战教学笔记08:Linux 文件的属性(上半部分)
第八节 Linux 文件的属性(上半部分) 标签(空格分隔):Linux实战教学笔记 第1章 Linux中的文件 1.1 文件属性概述(ls -lhi) linux里一切皆文件 Linux系统中的文件 ...