ASP.NET Core重写个人博客站点小结
今天用ASP.NET Core重写了个人博客站点,原来是基于ASP.NET 4.5开发的。重写工作总体很顺利,最后成功发布到Ubunt+Nginx平台上。效果如下:
右边的Header信息里可以看到已经是Nginx(Ubuntu)了,虽然最后成功发布了,但是过程中遇到点坑,特来分享。
HtmlHelper问题
ASP.NET Core之前,大家都很熟悉HtmlHelper方法。但是到了ASP.NET Core后,一些方法已经不能使用了,取而代之的是全新的TagHelper。但今天我遇到的问题是@Html.Action()方法不能使用了,使用TagHelper专门重写也很不方便。所幸ASP.NET Core有个全新的特性可以替代此方法,这个特性就是ViewComponent。
原来旧的代码是将分页部件的请求放置到单独的Controller中,通过@Html.Action()方法动态请求,如下:
public PartialViewResult RecentWorks(){var works = repository.Works.Where(w => w.IsEnable);return PartialView("MyWorksSummary", works);}
而使用ViewComponent特性的代码如下:
public class WorkComponent:ViewComponent{private IWorkRepository repository;public WorkComponent(IWorkRepository repo){this.repository = repo;}public IViewComponentResult Invoke(){var works = repository.Works.Where(w => w.IsEnable);return View("MyWorksSummary", works);}}
其中Invoke方法会在View中用于调用,很容易理解。
下面我们来看下二者调用方法的区别,首先旧的HtmlHelper方法调用如下:
<div class="col-md-12"><!--最近作品-->@Html.Action("RecentWorks", "Work")</div>
而新的ViewComponent特性调用如下:
<div class="col-md-12"><!--最近作品-->@await Component.InvokeAsync("WorkComponent")</div>
注意:ViewComponent组件的搜索路径是/Views/{对应控制器}/Components/{组件名}/{目标View}。例如我是在HomeController的Index视图中调用了ViewComponent组件,所以ASP.NET Core会在路径/Views/Home/Components/WorkComponent/目录下搜索用到的view视图。
Linux服务器配置问题
我使用的服务器是Ubuntu 16.04 LTS,主要参考的文档是微软的发布指南:https://docs.asp.net/en/latest/publishing/linuxproduction.html。
但是这部分有些坑爹,配置linux服务器的时间比写代码都长。
按照文章里总结,其实步骤不多,而且我并不需要配置Https,所以步骤就更少了,如下:
- 配置Nginx服务
- 配置supervisor
仅仅就这两步,但是第二布按照官方文档就会出问题了。
总共两个问题,第一个,如果我们按照文档配置玩Supervisor自动服务后,请求就会发现总是502错误.
然而当我们自己使用dotnet xxx.dll指令运行ASP.NET Core网站后,通过浏览器却能成功访问到。
再查看了日志文件后,会发现ASP.NET Core站点根本没有启动,执行指令出错。如下:
研究和实验了下面这段官方文档里提供的配置代码后,发现其中command一栏指令就不对:
[program:hellomvc] command=bash /usr/bin/dotnet /var/aspnetcore/HelloMVC/HelloMVC.dll autostart=true autorestart=true stderr_logfile=/var/log/hellomvc.err.log stdout_logfile=/var/log/hellomvc.out.log environment=ASPNETCORE__ENVIRONMENT=Production user=www-data stopsignal=INT
使用bash /usr/bin/dotnet xxx/xxx/{你的dll路径}根本就不能启动ASP.NET Core程序,应替换为如下命令才有效:
command=dotnet /var/aspnetcore/HelloMVC/HelloMVC.dll
这时查看日志就会发现程序被启动了,Nginx返回的也不再是502 Bad gateway错误了。
然而这时问题又来了,此时访问会发现浏览器一片空白,请求返回结果都是404. 手动在目录中运行ASP.NET Core程序仍然可以正常在浏览器访问到。
为什么有这个问题?我想了很久也没有解决办法,中间排除了权限问题和运行错误问题。重装了Nginx和Supervisor都没有作用,所以最后还是回到了这段配置文件内容。
经过多方查阅,发现是配置文件中少指明一行关于directory的配置信息,在填入这段配置文本后,居然就正常了。WTF,这个锅要谁来背?正确的配置文件内容如下:
[program:hellomvc] command=bash /usr/bin/dotnet /var/aspnetcore/HelloMVC/HelloMVC.dll directory=/var/aspnetcore/HelloMVC/ autostart=true autorestart=true stderr_logfile=/var/log/hellomvc.err.log stdout_logfile=/var/log/hellomvc.out.log environment=ASPNETCORE__ENVIRONMENT=Production user=www-data stopsignal=INT
这些问题折腾了一下午,坑爹,我还是觉得这个锅要微软来背。坑爹的官方文档,希望本文能对大家有用。
最后我发布到Linux后的博客运作良好,主页地址如下:http://changwei.tech.
转载于:https://www.cnblogs.com/mantgh/p/5658398.html
ASP.NET Core重写个人博客站点小结相关推荐
- 从博客园博问站点迁移ASP.NET Core展望.NET Core
今年年初,博客园的博问系统就已经迁移到了 ASP.NET Core on Linux并发布上线发布. 我们看到博客园发表官方博客-- .NET跨平台之旅:博问站点迁移至ASP.NETCore on L ...
- .NET跨平台之旅:博问站点迁移至ASP.NET Core on Linux并发布上线
Powered by ASP.NET Core on Linux! 我们全站的 .NET Core 迁移工作如火如荼,这是我们今年上半年的重要工作. 今天我们终于完成了博问产品(q.cnblogs.c ...
- 一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统
2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客.当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为"希赛网" ...
- 【译】使用Jwt身份认证保护 Asp.Net Core Web Api
原文出自Rui Figueiredo的博客,原文链接<Secure a Web Api in ASP.NET Core> 摘要:这篇文章阐述了如何使用 Json Web Token (Jw ...
- ASP.NET Core WebApi构建API接口服务实战演练
一.ASP.NET Core WebApi课程介绍 人生苦短,我用.NET Core!提到Api接口,一般会想到以前用到的WebService和WCF服务,这三个技术都是用来创建服务接口,只不过Web ...
- ASP.NET Core默认注入方式下如何注入多个实现(多种方式) - sky 胡萝卜星星 - CSDN博客...
ASP.NET Core默认注入方式下如何注入多个实现(多种方式) - sky 胡萝卜星星 - CSDN博客 原文:ASP.NET Core默认注入方式下如何注入多个实现(多种方式) - sky 胡萝 ...
- ASP.NET Core中实现单体程序的事件发布/订阅 - LamondLu - 博客园
标题:ASP.NET Core中实现单体程序的事件发布/订阅作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/10468058.html 项目源代码:h ...
- ASP.NET Core 入门教程 6、ASP.NET Core MVC 视图布局入门
一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)视图母版页教程 ASP.NET Core MVC (Razor)带有Section的视图母版页教程 ASP.NET Cor ...
- Taurus.MVC 支持Asp.Net Core 的过程
前言: 这些天,似乎.NET Core相关的新闻和文章经常在我眼前晃~~~ 昨天,微软又发布了.Core 2.1,又愰了一下,差点没亮瞎我的眼睛. 好吧,大概是上天给我的暗示,毕竟 CYQ.Data ...
最新文章
- EKL相关(一)、安装环境
- 如何在 Shell 脚本中执行语法检查调试模式
- HDU-2829 Lawrence (DP+四边形不等式优化)
- 武汉大学一学生,用python敲出樱花开放 | 附源码
- x509代码实例java_Java X509AttributeCertificate.getIssuer方法代码示例
- UIScrollview 技巧
- 获取当前上下文Activity
- C#.NET中数组、ArrayList和List三者的区别
- html5 播放加密视频播放器,.NET MVC对接POLYV——HTML5播放器播放加密视频
- 医学DICOM文件解析(笔记整理)
- Java文件上传【通用】
- 地图中的鼠标移动响应
- TPTP测试项目的性能
- Wormhole流程搭建踩坑总结(一)
- WarGame bandit
- 如何使用linux系统自带的led驱动
- [转]英文中的偏旁部首及其记忆
- 重庆科创学院03级计算机文秘,重庆科创职业学院——国际商务文秘实务学习课程标准.doc...
- 如何构建一个成功的期权交易系统?
- 怒江水电开发的争议与对工程实践的认识
热门文章
- python怎么写文件-Python 读写文件
- python stm32-尝试一下使用Python来开发STM32
- python官网下载步骤除了windows-python安装教程详解|python下载安装教程步骤
- 学会python如何兼职-学会Python自动制作PPT,立马在兼职群接到一单
- python好用-Pyzo -- 好用的 Python 轻量级 IDE
- 自学python找到工作-学完python能找到工作么
- python资料百度网盘-python自动保存百度盘资源到百度盘中的实例代码
- python画三维立体图-python之画三维图像
- python3.6.0安装教程-centos6.9安装python3.6.0和模块
- python web为什么不火-pythonweb为什么不火-问答-阿里云开发者社区-阿里云