.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