今天用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,所以步骤就更少了,如下:

  1. 配置Nginx服务
  2. 配置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重写个人博客站点小结相关推荐

  1. 从博客园博问站点迁移ASP.NET Core展望.NET Core

    今年年初,博客园的博问系统就已经迁移到了 ASP.NET Core on Linux并发布上线发布. 我们看到博客园发表官方博客-- .NET跨平台之旅:博问站点迁移至ASP.NETCore on L ...

  2. .NET跨平台之旅:博问站点迁移至ASP.NET Core on Linux并发布上线

    Powered by ASP.NET Core on Linux! 我们全站的 .NET Core 迁移工作如火如荼,这是我们今年上半年的重要工作. 今天我们终于完成了博问产品(q.cnblogs.c ...

  3. 一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统

    2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客.当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为"希赛网" ...

  4. 【译】使用Jwt身份认证保护 Asp.Net Core Web Api

    原文出自Rui Figueiredo的博客,原文链接<Secure a Web Api in ASP.NET Core> 摘要:这篇文章阐述了如何使用 Json Web Token (Jw ...

  5. ASP.NET Core WebApi构建API接口服务实战演练

    一.ASP.NET Core WebApi课程介绍 人生苦短,我用.NET Core!提到Api接口,一般会想到以前用到的WebService和WCF服务,这三个技术都是用来创建服务接口,只不过Web ...

  6. ASP.NET Core默认注入方式下如何注入多个实现(多种方式) - sky 胡萝卜星星 - CSDN博客...

    ASP.NET Core默认注入方式下如何注入多个实现(多种方式) - sky 胡萝卜星星 - CSDN博客 原文:ASP.NET Core默认注入方式下如何注入多个实现(多种方式) - sky 胡萝 ...

  7. ASP.NET Core中实现单体程序的事件发布/订阅 - LamondLu - 博客园

    标题:ASP.NET Core中实现单体程序的事件发布/订阅作者:Lamond Lu 地址:https://www.cnblogs.com/lwqlun/p/10468058.html 项目源代码:h ...

  8. ASP.NET Core 入门教程 6、ASP.NET Core MVC 视图布局入门

    一.前言 1.本教程主要内容 ASP.NET Core MVC (Razor)视图母版页教程 ASP.NET Core MVC (Razor)带有Section的视图母版页教程 ASP.NET Cor ...

  9. Taurus.MVC 支持Asp.Net Core 的过程

    前言: 这些天,似乎.NET Core相关的新闻和文章经常在我眼前晃~~~ 昨天,微软又发布了.Core 2.1,又愰了一下,差点没亮瞎我的眼睛. 好吧,大概是上天给我的暗示,毕竟 CYQ.Data  ...

最新文章

  1. EKL相关(一)、安装环境
  2. 如何在 Shell 脚本中执行语法检查调试模式
  3. HDU-2829 Lawrence (DP+四边形不等式优化)
  4. 武汉大学一学生,用python敲出樱花开放 | 附源码
  5. x509代码实例java_Java X509AttributeCertificate.getIssuer方法代码示例
  6. UIScrollview 技巧
  7. 获取当前上下文Activity
  8. C#.NET中数组、ArrayList和List三者的区别
  9. html5 播放加密视频播放器,.NET MVC对接POLYV——HTML5播放器播放加密视频
  10. 医学DICOM文件解析(笔记整理)
  11. Java文件上传【通用】
  12. 地图中的鼠标移动响应
  13. TPTP测试项目的性能
  14. Wormhole流程搭建踩坑总结(一)
  15. WarGame bandit
  16. 如何使用linux系统自带的led驱动
  17. [转]英文中的偏旁部首及其记忆
  18. 重庆科创学院03级计算机文秘,重庆科创职业学院——国际商务文秘实务学习课程标准.doc...
  19. 如何构建一个成功的期权交易系统?
  20. 怒江水电开发的争议与对工程实践的认识

热门文章

  1. python怎么写文件-Python 读写文件
  2. python stm32-尝试一下使用Python来开发STM32
  3. python官网下载步骤除了windows-python安装教程详解|python下载安装教程步骤
  4. 学会python如何兼职-学会Python自动制作PPT,立马在兼职群接到一单
  5. python好用-Pyzo -- 好用的 Python 轻量级 IDE
  6. 自学python找到工作-学完python能找到工作么
  7. python资料百度网盘-python自动保存百度盘资源到百度盘中的实例代码
  8. python画三维立体图-python之画三维图像
  9. python3.6.0安装教程-centos6.9安装python3.6.0和模块
  10. python web为什么不火-pythonweb为什么不火-问答-阿里云开发者社区-阿里云