C# APS.NET CORE 6.0 WEB API IIS部署

1.创建 APS.NET CORE6.0 WEB API项目

默认选项即可

源代码:

项目文件展开:

launchSettings.json

{"$schema": "https://json.schemastore.org/launchsettings.json","iisSettings": {"windowsAuthentication": false,"anonymousAuthentication": true,"iisExpress": {"applicationUrl": "http://localhost:19488","sslPort": 44308}},"profiles": {"ServerSideApi": {"commandName": "Project","dotnetRunMessages": true,"launchBrowser": true,//"launchUrl": "swagger",//"applicationUrl": "https://192.168.3.24:8080;http://192.168.3.24:8081","environmentVariables": {"ASPNETCORE_ENVIRONMENT": "Development"}},"IIS Express": {"commandName": "IISExpress","launchBrowser": true,"launchUrl": "swagger","environmentVariables": {"ASPNETCORE_ENVIRONMENT": "Development"}}}
}

Controllers\HomeController.cs

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using ServerSide.BLL;
using ServerSide.Common;
using ServerSide.Models;namespace ServerSideApi
{[Route("api")][ApiController]public class HomeController : ControllerBase{readonly IService<Users>? usersService;public HomeController(IService<Users> usersService){this.usersService = usersService;}[HttpGet("GetLogin")]//GetLogin {}{account}/{password}public async Task<string> Get(string account, string password){//jwt token//登录成功之后生成令牌{account:'zhangsan',password:'123456'}string? token = "0";//token令牌Users? users= await usersService!.GetAsync(m => m.Account == account&& m.Password == DataEncrypt.MD5Encrypt(password));if (users != null) {token = Guid.NewGuid().ToString(); //users.Account;RedisCache.SetCache(token, users.Account!);//36不会重复}return token;}}
}

Controllers\SystemActionController.cs

using Bogus.Bson;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using ServerSide.Common;
using ServerSide.DAL;
using ServerSide.Models;
using System.Text.Json.Nodes;namespace ServerSideApi.Controllers
{public class SystemActionController : Controller{private string msgModel = "{{\"code\":{0},\"message\":\"{1}\",\"result\":{2}}}";//检查用户名是否已注册/// <summary>/// 获取对应订单激活码/// </summary>/// <param name="OrderInfo">订单号</param>/// <returns></returns>#region 获取激活码[HttpGet("GetActionKey")]//GetLogin {}{account}/{password}public string GetActionKey(string OrderInfo){string systemActionKey = string.Empty;int i = 0;using (EFContext db=new EFContext()){systemActionKey = db!.SystemActionEntity!.ToList()!.Where((s) => s.OrderInfo == OrderInfo && s.ActionStatId == 2).FirstOrDefault()!.KeyCode!;if(systemActionKey.Length>5){db!.SystemActionEntity!.ToList()!.ForEach((s) => {if (s.KeyCode == systemActionKey){s.ActionStatId = 3;}i=db!.SaveChanges();LogHelper.Info(i > 0 ? $@"OrderInfo:{OrderInfo} Action Key Read {systemActionKey} PASS" : $@"OrderInfo:{OrderInfo} Action Key Read FAIL");  });}if (i>0||systemActionKey.Length>5)return string.Format(msgModel, (int)(ResponseCode.成功), "成功", systemActionKey);elsereturn string.Format(msgModel, (int)(ResponseCode.操作失败), "失败", "null");}}#endregion/// <summary>/// 获取对应订单末激活信息/// </summary>/// <param name="OrderInfo">订单信息</param>/// <returns></returns>#region 获取末激活数据[HttpGet("GetAllNotActionData")]//GetLogin {}{account}/{password}public string GetAllNotActionData(string OrderInfo){List<SystemActionEntity>systemActionEntities = new List<SystemActionEntity>();using(EFContext db=new EFContext()){db!.SystemActionEntity!.ToList()!.ForEach((s) => { if(s.OrderInfo==OrderInfo&&s.ActionStatId==2)//1.已激活、2.末激活中、3.激活中{systemActionEntities.Add(s);}});}LogHelper.Info(systemActionEntities.Count > 0 ? $@"OrderInfo:{OrderInfo} Not Action Data Read PASS" : $@"OrderInfo:{OrderInfo} Not Action Data Read FAIL");if (systemActionEntities.Count>0){return string.Format(msgModel, (int)(ResponseCode.成功), "成功", JsonConvert.SerializeObject(systemActionEntities));}elsereturn string.Format(msgModel, (int)(ResponseCode.操作失败), "失败", JsonConvert.SerializeObject(systemActionEntities));}#endregion/// <summary>/// 获取所有激活数据/// </summary>/// <param name="OrderInfo">订单信息</param>/// <returns></returns>#region 获取所有已激活的数据[HttpGet("GetAllIsActionData")]public string GetAllIsActionData(string OrderInfo) //List<SystemActionEntity>{lock(this){List<SystemActionEntity> systemActionEntities = new List<SystemActionEntity>();using (EFContext db = new EFContext()){db!.SystemActionEntity!.ToList()!.ForEach((s) => {if (s.OrderInfo == OrderInfo && s.ActionStatId == 1)//1.已激活、2.末激活中、3.激活中{systemActionEntities.Add(s);}});}if (systemActionEntities.Count > 0){return string.Format(msgModel, (int)(ResponseCode.成功), "成功", JsonConvert.SerializeObject(systemActionEntities));}else{return string.Format(msgModel, (int)(ResponseCode.操作失败), "失败", JsonConvert.SerializeObject(systemActionEntities));}}    }#endregion/// <summary>/// 更新激活数据/// </summary>/// <param name="macAddress">mac地址</param>/// <param name="BarcodeNo">sn条码</param>/// <param name="keyCode">激活码</param>/// <returns></returns>#region 更新激活数据[HttpPut("UpdateActionData")]public string UpdateActiopnData(string macAddress,string BarcodeNo,string keyCode){using(EFContext db = new EFContext()) {db!.SystemActionEntity!.ToList()!.ForEach((s) => {if(s.KeyCode==keyCode){s.MacAddress = macAddress;s.ActionStatId = 1;s.BarcodeNo = BarcodeNo;}});int result=db!.SaveChanges();if(result>0){return string.Format(msgModel, (int)(ResponseCode.成功), "成功", $@"KeyCode:{keyCode} Data Update Pass!!");}else{return string.Format(msgModel, (int)(ResponseCode.操作失败), "失败", $@"KeyCode:{keyCode} Data Update Fail!!");}}}#endregion}
}

Controllers/UsersController.cs

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using ServerSide.BLL;
using ServerSide.Common;
using ServerSide.Models;
using ServerSideApi.Filters;namespace ServerSideApi
{[ApiController, Route("api/users"),TypeFilter(typeof(UsersAuthorizeAttribute))]public class UsersController : ControllerBase{readonly IService<Users>? usersService;public UsersController(IService<Users> usersService){this.usersService = usersService;}//https://localhost:8080/api/users/zhangsan//HttpGet查询 HttpPost添加 HttpPut修改 HttpDelete删除//[HttpGet]//public List<Users> Get()//{//    return usersService!.GetAll().ToList();//}//[HttpGet("{account}")]//public Users Get(string account)//{//    return usersService!.Get(account);//}//[HttpGet("{account}/{password}")]//GetLogin//public Users Get(string account, string password)//{//    return usersService!.GetAll(m => m.Account == account//                && m.Password == DataEncrypt.MD5Encrypt(password))//        .FirstOrDefault()!;//}//[HttpPost]//添加  FromBody:规范化标识,告诉服务器是以http请求正文形式发送模式(非URL)//public int Post([FromBody] Users users)//对象形参//{//    users.Password = DataEncrypt.MD5Encrypt(users.Password!);//    return usersService!.Add(users);//}//[HttpPut]//修改//public int Put([FromBody] Users users)//对象形参//{//    return usersService!.Update(users);//}//[HttpDelete]//删除//public int Put(string account)//对象形参//{//    return usersService!.Remove(account);//}//特性[]//[TypeFilter(typeof(UsersAuthorizeAttribute))]//第一种方式//第二种方式[HttpGet]public async Task<IEnumerable<Users>> Get()//xml json List<Users>{return await usersService!.GetAllAsync();//结果集List}[HttpGet("{account}")]public async Task<Users> Get(string account){return await usersService!.GetAsync(account);}[HttpPost]//添加  FromBody:规范化标识,告诉服务器是以http请求正文形式发送模式(非URL)public async Task<int> Post([FromBody] Users users)//对象形参{users.Password = DataEncrypt.MD5Encrypt(users.Password!);return await usersService!.AddAsync(users);}[HttpPut]//修改public async Task<int> Put([FromBody] Users users)//对象形参{users.Password = DataEncrypt.MD5Encrypt(users.Password!);try{return await usersService!.UpdateAsync(users);}catch (Exception){return 0;}}[HttpDelete("delete/{account}")]//删除public async Task<int> Delete(string account)//对象形参{return await usersService!.RemoveAsync(account);}}
}

 Filters/UsersAuthorizeAttribute.cs

using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Filters;
using ServerSide.Common;namespace ServerSideApi.Filters
{public class UsersAuthorizeAttribute : IAuthorizationFilter{public void OnAuthorization(AuthorizationFilterContext context){string? token = context.HttpContext.Request.Headers["token"];//"" null//有没有带Tokenif (string.IsNullOrEmpty(token)){//进来后直接返回到前端context.Result = new JsonResult(0);//文本类型text  没有授权}else//判断token是否正确{string? key = RedisCache.GetCache(token);//36位字符串在redisif (string.IsNullOrEmpty(token)){context.Result = new JsonResult(0);//没有授权}}//没进去,正常进入控制器>动作方法}}
}

Program.cs

using Microsoft.EntityFrameworkCore;
using ServerSide.BLL;
using ServerSide.DAL;var builder = WebApplication.CreateBuilder(args);// Add services to the container.builder.Services.AddControllers();
// Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle
builder.Services.AddEndpointsApiExplorer();
builder.Services.AddSwaggerGen();//注入业务类
builder.Services.AddScoped(typeof(IRepository<>),typeof(Repository<>));//IOC容器
builder.Services.AddScoped(typeof(IService<>),typeof(Service<>));//注入EFCore对象
string connStr = builder.Configuration.GetConnectionString("connStr")!;builder.Services.AddDbContext<EFContext>(options=>options.UseSqlServer(connStr));//webapi请求方案
builder.Services.AddCors(options => 
{options.AddPolicy("AllowAll",options=>options.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod()//method:put delete post get restful风格架构);
});//enctype="multpart/form-data" 请求头  token="asdjasdasg123123"
//http://www.baidu.com/product?id=1001  url传参 
//<form ><input type="text" name="username" /></form> 表单传参var app = builder.Build();// Configure the HTTP request pipeline.
//if (app.Environment.IsDevelopment())
//{
//    app.UseSwagger();//Swagger工具
//    app.UseSwaggerUI();
//}
app.UseSwagger();
app.UseSwaggerUI(c => 
{c.RoutePrefix = "";c.SwaggerEndpoint("/swagger/v1/swagger.json", "Test Web Api");
}
);
app.UseCors("AllowAll");//使用跨域方案
app.UseHttpsRedirection();app.UseAuthorization();app.MapControllers();app.Run();

 设置 Swagger UI 为起始页

打开 launchSettings.json 文件
屏蔽以下两行代码

打开 Program.cs 文件
屏蔽原来的环境判断,新增以下代码 

 

app.UseSwagger();
app.UseSwaggerUI(c =>{c.RoutePrefix = "";c.SwaggerEndpoint("/swagger/v1/swagger.json", "ApiHelp V1"); //第二个参数可自定义命名});

发布项目

发布项目:右击项目 → 发布

 选择文件夹

 选择文件夹位置,这个位置就是 项目发布后的文件 所在的位置

检查 目标位置 的文件夹是否存在,不然会报错
点击 更多操作→编辑 可根据自己的项目进行设置

 

 设置好后,点击 发布

当输出显示成功即发布成功;若失败会显示具体信息供排查

2、在 IIS 部署

这里就不再阐述了,引用这位博主的文章
如何安装IIS

安装 Hosting Bundle

点击 下载 .NET(Linux、macOS 和 Windows)
下载安装 Hosting Bundle
我这里安装的是 Hosting Bundle 6.0,可根据情况适当更改

安装成功后,打开 IIS →模块 后会在列表看到 AspNetCoreModuleV2

 

 

 右键 应用程序池 添加应用程序池
选择 无托管代码

 

右键 网站 添加网站 

 

点击浏览,则会跳转到 Swagger UI 界面

 

 

3.内网穿透

 打开 控制面板 → 防火墙

 

 

 端口 → 特定本地端口
然后一直按 下一步,最后填写 名称 即可完成

 

 展示效果:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/170325.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入理解MySQL索引及事务

✏️✏️✏️今天给各位带来的是关于数据库索引以及事务方面的基础知识 清风的CSDN博客 &#x1f61b;&#x1f61b;&#x1f61b;希望我的文章能对你有所帮助&#xff0c;有不足的地方还请各位看官多多指教&#xff0c;大家一起学习交流&#xff01; 动动你们发财的小手&#…

微机原理_4

一、单项选择题&#xff08;本大题共 15 小题&#xff0c;每小题 3 分&#xff0c;共 45 分。在每小题给出的四个备选项中&#xff0c;选出一个正确的答案&#xff0c;请将选定的答案填涂在答题纸的相应位置上。) 1在产品研制的过程中,通常采用( )类型的存储芯片来存放待调试的…

河南省第五届“金盾信安杯”网络与数据安全大赛实操技能赛 部分wp(自己的一些思路和解析 )(主misc crypto )

芜湖 不评价 以下仅是自己的一些思路和解析 有什么问题或者建议随时都可以联系我 目录 题目一 来都来了 操作内容&#xff1a; flag值&#xff1a; 题目二 Honor 操作内容&#xff1a; flag值&#xff1a; 题目三 我看看谁还不会RSA 操作内容&#xff1a; flag值&a…

运维高级-day01

shell回顾 1、快速生成版权控制信息&#xff0c;具体的内容自己替换 [root scripts]# cat ~/.vimrc autocmd BufNewFile *.py,*.cc,*.sh,*.java exec ":call SetTitle()" func SetTitle() if expand("%:e") sh call setline(1,"#!/bin/bash")…

python:傅里叶分析,傅里叶变换 FFT

使用python进行傅里叶分析&#xff0c;傅里叶变换 FFT 的一些关键概念的引入&#xff1a; 1.1.离散傅里叶变换&#xff08;DFT&#xff09; 离散傅里叶变换(discrete Fourier transform) 傅里叶分析方法是信号分析的最基本方法&#xff0c;傅里叶变换是傅里叶分析的核心&…

上手 Promethus - 开源监控、报警工具包

名词解释 Promethus 是什么 开源的【系统监控和警报】工具包 专注于&#xff1a; 1&#xff09;可靠的实时监控 2&#xff09;收集时间序列数据 3&#xff09;提供强大的查询语言&#xff08;PromQL&#xff09;&#xff0c;用于分析这些数据 功能&#xff1a; 1&#xff0…

Java Web——XML

1. XML概述 XML是EXtensible Markup Language的缩写&#xff0c;翻译过来就是可扩展标记语言。XML是一种用于存储和传输数据的语言&#xff0c;它使用标签来标记数据&#xff0c;以便于计算机处理和我们人来阅读。 “可扩展”三个字表明XML可以根据需要进行扩展和定制。这意味…

ubuntu+Teslav100 环境配置

系统基本信息 nvidia-smi’ nvidia-smi 470.182.03 driver version:470.182.03 cuda version: 11.4 产看系统体系结构 uname -aUTC 2023 x86_64 x86_64 x86_64 GNU/Linux 下载miniconda https://mirrors.tuna.tsinghua.edu.cn/anaconda/miniconda/?CM&OA https://mi…

MyBatisPlus入门介绍

目录 一、MyBatisPlus介绍 润物无声 效率至上 丰富功能 二、Spring集成MyBatisPlus 三、SpringBoot集成MyBatisPlus 一、MyBatisPlus介绍 MyBatis-Plus&#xff08;简称 MP&#xff09;是一个MyBatis的增强工具&#xff0c;在MyBatis的基础上只做增强不做改变&#xff0c…

Kafka系列 - Kafka一篇入门

Kafka是一个分布式流式处理平台。很多分布式处理系统&#xff0c;例如Spark&#xff0c;Flink等都支持与Kafka集成。 Kafka使用场景 消息系统&#xff1a;Kafka实现了消息顺序性保证和回溯消费。存储系统&#xff1a;Kafka把消息持久化到磁盘&#xff0c;相比于其他基于内存的…

如何处理git多分支

本篇文章主要处理以下两种多分支问题 如何将自己在本地的修改上传到一个新的Git分支&#xff08;比如用于测试&#xff0c;不合并进main分支&#xff09;&#xff1f;如何在一个新的本地仓库拉取一个项目的非main分支&#xff0c;并处理他们关联关系&#xff1f; 1. 将自己在…

java基于springboot公益帮学网站 新闻发布系统的设计与实现vue

以Java为开发平台&#xff0c;综合利用Java Web开发技术、数据库技术等&#xff0c;开发出公益帮学网站。用户使用版块&#xff1a;可以选择注册并登录&#xff0c;可以浏览信息、可以网上互动、发布文章、内容推荐等。后台管理员管理版块&#xff1a;以管理员身份登录网站后台…

C# 读写FDX-B(ISO11784/85)动物标签源码

本示例使用的发卡器&#xff1a;EM4305 EM4469 ISO11784/85协议125K低频FXD-B动物标签读写发卡器-淘宝网 (taobao.com) using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using S…

rk3588配置uac功能,android13使能uac及adb的复合设备

最近&#xff0c;因新增需求需要在现有产品上增加UAC的功能&#xff0c;查阅并学习相关知识后&#xff0c;在rk3588 SOC硬件平台搭载android13系统平台上成功配置了uac及uac&adb的复合设备。基于开源共享精神希望给大家提供些参考。 1.技术可行性预研 &#xff08;1&#…

【一起来学kubernetes】7、k8s中的ingress详解

引言配置示例负载均衡的实现负载均衡策略实现模式实现方案Nginx类型Ingress实现Treafik类型Ingress实现HAProxy类型ingress实现Istio类型ingress实现APISIX类型ingress实现 更多 引言 Ingress是Kubernetes集群中的一种资源类型&#xff0c;用于实现用域名的方式访问Kubernetes…

自建私有化证书颁发机构(Certificate Authority,CA)实战之 《0x02 Nginx 配置 https双向认证》

自建CA实战之 《0x02 Nginx 配置 https双向认证》 上一章节我们已经实现了Nginx上配置https单向认证&#xff0c;主要场景为客户端验证服务端的身份&#xff0c;但是服务端不验证客户端的身份。 本章节我们将实现Nginx上配置https双向认证&#xff0c;主要场景为客户端验证服…

C++ 实现位图

引出 面试题&#xff1a;给出 40 亿个不重复的无符号整数&#xff0c;没有排过序。给定一个无符号整数&#xff0c;如何快速判断这个数是否在这 40 亿个无符号整数中。[ 腾讯面试题 ] 想法一&#xff1a;将 40 亿个数据存放到 set 里面&#xff0c;然后再查找指定的无符号整数。…

论文阅读——MCAN(cvpr2019)

补充一下MCAN-VQA&#xff1a; 对图片的处理&#xff1a;首先输入图片到Faster R-CNN&#xff0c;会先设定一个判断是否检测到物体的阈值&#xff0c;这样动态的生成m∈[10,100]个目标&#xff0c;然后从检测到的对应的区域通过平均池化提取特征。第i个物体特征表示为&#xff…

MUYUCMS v2.1:一款开源、轻量级的内容管理系统

MuYuCMS&#xff1a;一款基于Thinkphp开发的轻量级开源内容管理系统&#xff0c;为企业、个人站长提供快速建站解决方案。它具有以下的环境要求&#xff1a; 支持系统&#xff1a;Windows/Linux/Mac WEB服务器&#xff1a;Apache/Nginx/ISS PHP版本&#xff1a;php > 5.6 (…

发布鸿蒙的第一个java应用

1.下载和安装华为自己的app开发软件DevEco Studio HUAWEI DevEco Studio和SDK下载和升级 | HarmonyOS开发者 2.打开IDE新建工程&#xff08;当前用的IDEA 3.1.1 Release&#xff09; 选择第一个&#xff0c;其他的默认只能用(API9)版本&#xff0c;搞了半天才发现8&#xff…