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了