CentOS8 下发布 .NET5 WebApi 流程记录!

环境以及工具:

腾讯云 CentOS8.2

Vistual Studio 2019

XShell 6

 

1.新建一个Asp.NET Core WebApi项目,并取名为"webapi"

 

 

 

 

2.项目创建好之后,切换成webapi运行方式,直接运行!能看到Swagger UI界面,并且接口测试成功!

 

 

3.接下来发布webapi项目。

 

 

 

4.发布完成后文件目录如下!

 

5.将刚才发布的文件夹压缩成zip格式的文件

 

 

 

6.Xshell链接到CentOS的服务器

 

7.来到home目录下

cd /
ls
cd home/
ls

 

8.将刚才打包的压缩包拖入Xshell,文件会自动上传到CentOS的home目录下。

 

 

9.输入命令 unzip webapi.zip 将压缩包解压成文件夹

unzip webapi.zip

 

 

10.cd webapi/ 进入webapi目录

cd webapi/
ls

 

11.执行dotnet webapi.dll 提示 -bash: dotnet: command not found!因为我们还没有安装.NET5运行时

 

12.执行 sudo dnf install aspnetcore-runtime-5.0 安装运行时!

 

13.再次执行 dotnet webapi.dll,可以看到程序已经正常运行了!

 

14.外网远程访问接口却看不到Swagger UI界面!并且接口也无法访问!

 

 

15.这是因为监听域名设置不正确,不能使用 http://localhost:5000 的方式来监听,localhost只能本机访问,外网无法访问!需要使用泛域名的方式!

16.输入命令 vim appsettings.json 打开  appsettings.json 文件。

按下 a键,进入insert模式,对appsettings.json文件进行修改,加入 "urls":"http://*:5000",表示使用泛域名的方式监听5000端口。

 

17.修改完成后按下esc键退出insert模式,并输入:wq保存文件!重新运行 dontnet webapi.dll。可以看到监听的url变成了 http://[::]:5000

 

18.之后我们再来进行远程访问,看看swagger ui能正确显示吗!我们发现swagger ui依旧无法正确显示!但是接口已经能访问了。

 

 

19.上述问题肯定是swagger配置不正确。我们回到项目源码里看到Configure函数设置了只有开发环境才会显示swagger ui。我们将下面的两句代码提到if判断外面!

 

20.重新从第3步开始执行,再次发布项目到CentOS中并运行!记得别忘了改appsettings.json文件!

用到的命令如下

#回退到上一层目录
cd ..

#查看文件列表
ls

#强制删除webapi文件夹
rm -rf webapi

#强制删除webapi.zip压缩包
rm -rf webapi.zip

#解压缩webapi.zip
unzip webapi.zip

#进入webapi目录
cd webapi/

#运行webapi
dotnet webapi.dll

再次运行!

 

21.再一次远程访问 http://119.28.135.102:5000/ 不幸的是依旧看不到 swagger ui的页面,接口依然能正常使用!

 

 

22.其实原因很简单!我们来看看项目中 launchSettings.json文件,该文件包含vistual studio调试项目时候的一些启动参数!重点看launchUrl这个字段,它的值是 swagger!

 

这个值表示当我们在vs调试启动webapi时,该url默认会给我们加上swagger前缀,那么实际本地调试时的URL地址是 “http://localhost:5000/swagger/index.html”

 

当程序发布后,我们访问远程的 "http://119.28.135.102:5000/",浏览器并不会自动给我们加上swagger后缀,所以需要手动输入。最后实际的url地址应该是"http://119.28.135.102:5000/swagger'.

OK,swagger ui界面出来了。至此我们在 CentOS下发布.NET5 WebApi算是成功了!

 

 

23.假如我们想直接通过 “http://119.28.135.102:5000/”就能访问swagger ui,不需要加入swagger前缀应该怎么办呢?只需要对swagger的RoutePrefix设置为空即可!下面对代码进行修改.

同时也要把launchSettings.json下的launchUrl设置为空

 

24.再次发布->上传到服务器->解压->执行dotnet webapi.dll。现在就可以不需要添加swagger前缀远程访问swagger ui了

 

posted @ 2021-07-21 18:14  凉游浅笔深画眉  阅读(359)  评论(1编辑  收藏  举报