.net5開發webapi筆記


.net5封裝c++動態庫開發筆記

目錄

1.部署IIS

2.部署linux+Docker

功能說明:

1. 提供swagger文檔(需要顯示注釋),

swagger配置:在項目屬性->生成 中勾選 xml文檔

Startup 中配置


返回值定義:

效果如下:

2. 2個Post接口,參數使用json格式

2.1 controller方法定義

2.2 controller注入services


3. 接口需要進行簽名驗證,返回值做加密處理

請求接口前先判斷參數以及本次請求是否合法
增加加密攔截器

請求方法前驗證

先判斷必要參數是否齊全是否正確
再判斷redis中是否存在本次請求(1分鍾之內不能重復請求)
再判斷時間戳誤差范圍不能超過1分鍾

請求完成后加密返回值

注入:使攔截器起作用

4. 處理接口的統一異常返回


注入到controller中

5. 日志記錄(使用Serilog)

安裝 Serilog.AspNetCore

6. 其他

調用c++庫 需要將項目打包成 x86
設置swagger中參數 首字母 大寫

7.部署

1.部署IIS

運行環境下載地址

項目發布
將xml文件 設置為始終復制
發布到文件夾

IIS配置
程序池 配置為 無托管

在程序池高級設置中啟用win32

開啟加載用戶配置

不開啟會有警告日志

報錯1:Failed to load ASP.NET Core runtime(win7 X64)
cmd查看 dotnet --info報錯信息如下
image
解決:是缺少KB2533623 這個補丁 下載安裝之后重啟電腦就好了

2.1.部署linux+Docker

linux版本 centeros7

1.安裝.net環境

官網下載地址

網盤下載:提取碼abcd
下載完成使用 winscp上傳(直接復制 會報錯導致解壓不了)
然后解壓

命令執行

新建文件夾: mkdir dotnet
解壓 :tar zxf dotnet-sdk-5.0.100-linux-x64.tar.gz -C $HOME/donet
找到etc下面的profile文件  在最后面添加
export DOTNET_ROOT=$HOME/donett
export PATH=$PATH:$HOME/donett
執行  source /etc/profile
執行 donet --version

2.安裝docker環境

下載離線安裝包或者從上面的網盤
上傳到主文件夾

解壓后 復制到 /usr/bin下面
解壓命令

tar zxvf  文件名.tgz

復制命令:

sudo cp $HOME/docker/* /usr/bin

創建docker.service 文件

[Unit]

Description=Docker Application Container Engine

Documentation=https://docs.docker.com

After=network-online.target firewalld.service

Wants=network-online.target

[Service]

Type=notify

# the default is not to use systemd for cgroups because the delegate issues still

# exists and systemd currently does not support the cgroup feature set required

# for containers run by docker

ExecStart=/usr/bin/dockerd

ExecReload=/bin/kill -s HUP $MAINPID

# Having non-zero Limit*s causes performance problems due to accounting overhead

# in the kernel. We recommend using cgroups to do container-local accounting.

LimitNOFILE=infinity

LimitNPROC=infinity

LimitCORE=infinity

# Uncomment TasksMax if your systemd version supports it.

# Only systemd 226 and above support this version.

#TasksMax=infinity

TimeoutStartSec=0

# set delegate yes so that systemd does not reset the cgroups of docker containers

Delegate=yes

# kill only the docker process, not all processes in the cgroup

KillMode=process

# restart the docker process if it exits prematurely

Restart=on-failure

StartLimitBurst=3

StartLimitInterval=60s

 

[Install]

WantedBy=multi-user.target

復制到 /etc/systemd/system 目錄下

復制命令: sudo cp $HOME/docker.service /etc/systemd/system

注冊 docker.為服務:

vim /etc/systemd/system/docker.service (執行完關閉終端 重新打開)

啟動docker

chmod +x /etc/systemd/system/docker.service             #添加文件權限並啟動docker
systemctl daemon-reload                                                       #重載unit配置文件
systemctl start docker                                                             #啟動Docker
systemctl enable docker.service                                           #設置開機自啟

驗證

systemctl status docker                                                         #查看Docker狀態
docker -v                    #查看Docker版本

3.發布

項目中添加Dockerfile文件
修改為

#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.

FROM registry.cn-hangzhou.aliyuncs.com/newbe36524/aspnet:5.0-buster-slim AS base  #微軟的慢  替換為阿里雲
WORKDIR /app
EXPOSE 80
EXPOSE 443

COPY ./publish .
ENTRYPOINT ["dotnet", "Webapi.dll"]

項目發布

發布完成將 文件夾和dockfile上傳到Home/Root/Webapi下

開始發布

進入webapi文件夾:cd Root/Webapi

創建docker鏡像  :docker build -t webapi .   (后面有個. 中間有空格)

查看創建的鏡像: docker images

創建運行時:
不設置自啟動:docker run -d -p 81:80 --name webapi webapi 

設置自啟動:docker run -d -p 81:80 --restart always --name webapi webapi

后面補充自啟動:docker update --restart=always webapi 

查看是否啟動成功:docker ps  或 docker ps -a

Up說明成功

查看是否啟動成功:curl localhost:81 

網站訪問:localhost:81/swagger

如果訪問出現404:
在項目Program.cs 中添加以下代碼

.UseContentRoot(Directory.GetCurrentDirectory())


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM