【C#】WebAPI,在Windows IIS平台部署_c#web api发布-程序员宅基地

技术标签: C#  IIS  C#项目  WebApi  Web发布  网站搭建  

目录

前言

一、技术介绍

1.1 IIS概念

1.2 WebApi概念

二、部署准备

2.1 Visual Studio本地项目配置

2.2 运行调试,以本地 localhost(或127.0.0.1)形式访问

2.3 运行调试,以本地IP(192.168.6.152)形式访问

三、详细步骤

3.1 打包发布

3.2 安装IIS(Internet信息服务)

3.3 配置IIS(Internet信息服务)

3.4 启动IIS,进行集成测试

四、项目异常处理

4.1 500.19-Internal Server Error

4.2 500.21-Internal Server Error

五、项目展示

4.1 文件下载

4.2 读取二维码标签

六、系列文章


前言

我能抽象出整个世界,但是我不能抽象你。 想让你成为私有常量,这样外部函数就无法访问你。 又想让你成为全局常量,这样在我的整个生命周期都可以调用你。 可惜世上没有这样的常量,我也无法定义你,因为你在我心中是那么的具体。

哈喽大家好,本专栏为【项目实战】专栏,有别于【底层库】专栏,我们可以发现增加 了『问题描述』、『项目展示』章节,十分符合项目开发流程,让读者更加清楚项目解决的问题、以及产品能够达到的效果。本专栏收纳项目开发过程的解决方案,是我项目开发相对成熟、可靠方法的提炼,我将这些问题的解决思路梳理,撰写本文分享给大家,大家遇到类似问题,可按本文方案处理。

本专栏会持续更新,不断完善,专栏文章关联性较弱(文章之间依赖性较弱,没有阅读顺序)。大家有任何问题,可以私信我。如果您对本专栏感兴趣,欢迎关注吧,我将带你用最简洁的代码,实现复杂的功能。

提示:本专栏为项目实战篇,未接触过项目开发的学生理解困难,不建议阅读。

一、技术介绍

1.1 IIS概念

互联网信息服务(英语:Internet Information Services,简称IIS),是由微软公司提供的基于运行Microsoft Windows的互联网基本服务。Apache是其在网络服务软件中的主要竞争者。

1.2 WebApi概念

WebAPI是一个框架,可以轻松构建HTTP服务,覆盖广泛的客户端,包括浏览器和移动设备,WebAPI是在.NetFramwork上构建RESTful程序的理想平台。

以上是官网的解释,当前最新的.net 6,在跨平台 .net core也可以开发WebApi,不单单只是  .NetFramwork平台了。这两大平台编译生成的包,并不通用,需要注意。

二、部署准备

WebAPI在项目发布部署前,我们要首先要确保没有bug,可以正常运行,以下是本地调试的步骤,如果项目已经测试OK,可以跳过。

2.1 Visual Studio本地项目配置

编写好WEBAPI代码,开始本地调试。

步骤:右键选中项目-->【属性】-->【Web】,设置Web访问的端口号,创建虚拟目录。

端口号没有具体规定,不冲突即可,往大的编,因为低位的端口号被计算机基础服务所占用。

2.2 运行调试,以本地 localhost(或127.0.0.1)形式访问

①点击工具栏【IIS Express】

②浏览地址输入接口,看是否可以访问。

2.3 运行调试,以本地IP(192.168.6.152)形式访问

127.0.0.1是回路地址,来检验本机TCP/IP协议栈,实际使用过程中服务端不在本机,是外部地址,要用IP地址测试。

我先做个演示,CMD输入以下命令找到本机IP:

Ipconfig --all

“红色框框”显示本机IP为192.168.6.152。外部用户采用IP+端口号访问,如下图浏览器访问不了,400错误。

解决方案:

  • 打开项目源码目录-->依次找 .vs\config\ applicationhost.config,如果找不到需要开启隐藏文件夹显示功能。
  • 找到< bindings>添加一行,IP为本机IP地址,如下图所示:

  • 重启VS(一定要重启),并以管理员身份运行调试。注意看右下角任务栏,IIS Express出现了本机IP。

  • 回到浏览器,刷新请求,ok。


三、详细步骤

本节我们开始进行正式发布。

3.1 打包发布

选中项目解决方案-->【发布】-->【IIS、FTP等】-->【发布】-->发布方法选“文件系统”、选择发布的路径。

我选择路径:

D:\WEBAPI

下一步,勾选“在发布前删除所有现有文件”。

保存,等待发布完成。此时我们路径下会得到几个文件。

3.2 安装IIS(Internet信息服务)

本文介绍在IIS上部署,当然你也可以选择Tomcat,原理都一样,承载软件。

 安装IIS功能

控制面板-->程序和功能-->启用和关闭Windows功能-->IIS相关功能勾选。如下图:

3.3 配置IIS(Internet信息服务)

点击搜索“IIS”,创建网站,选择项目发布的路径,如下图:

3.4 启动IIS,进行集成测试

浏览器输入地址localhost:8090/api/OR/Test,当然你输入本机IP、127.0.0.1也都是可以访问的,出现如下界面可返回数据就大功告成了。


四、项目异常处理

我这里分析了可能出现的报错情况,请按下方报错提示处理:

4.1 500.19-Internal Server Error

IIS 7访问的时候出现以下异常:

不能在此路径中使用此配置节。如果在父级别上锁定了该节,便会出现这种情况。锁定是默认设置的(overrideModeDefault="Deny")......

解决方案:

因为 IIS 7 采用了更安全的 web.config 管理机制,默认情况下会锁住配置项不允许更改。

以管理员身份运行命令行

C:\windows\system32\inetsrv\appcmd unlock config -section:system.webServer/handlers

其中的 handlers 是错误信息中红字显示的节点名称。

如果modules也被锁定,再运行

C:\windows\system32\inetsrv\appcmd unlock config -section:system.webServer/modules

4.2 500.21-Internal Server Error

解决方案:

这是没有执行注册aspnet导致的,cmd注册C:\Windows\Microsoft.NET\Framework64\v4.0.30319\apsnet_regiis.exe -i。

如果错误依旧存在,再运行cmd,然后使用dism工具依次执行以下指令即可:

dism /online /enable-feature /featurename:IIS-ISAPIFilter

dism /online /enable-feature /featurename:IIS-ISAPIExtensions

dism /online /enable-feature /featurename:IIS-NetFxExtensibility45

dism /online /enable-feature /featurename:IIS-ASPNET45

这样,你就可以正常访问API接口了。


五、项目展示

我的WebAPI项目已经部署完成了,你们的怎么样?这里我展示一下部分,我服务端所能提供的功能,我采用Postman接口工具向你们展示了。

4.1 文件下载

复制到浏览地址栏,回车可以直接跳出下载的包。

4.2 读取二维码标签

六、系列文章

【C#】单号生成器(编号规则、固定字符、流水号、产生业务单号)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129129787

【C#】日期范围生成器(构建开始日期、结束日期)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129040663

【C#】数据实体类使用
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128816638

【C#】单据审批流方案
本文链接:https://blog.csdn.net/youcheng_ge/article/details/128972545

【C#】二维码标签制作及打印
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126884228

【C#】最全单据打印源码(设计打印模板、条形码&二维码、标签、字体)

本文链接:https://blog.csdn.net/youcheng_ge/article/details/129415723

【C#】条码管理操作手册
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126589496

【C#】IIS平台下,WebAPI发布及异常处理
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126539836

【C#】【提高编程效率】代码模板生成工具
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126890673

【C#】【提高编程效率】Excel数据批量导入数据库
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126427323

【C#】Windows服务(Service)安装及启停方案
本文链接:https://blog.csdn.net/youcheng_ge/article/details/124053794

【C#】穿透Session隔离,服务调用外部程序(无窗体界面解决)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/124053033

【C#】任务计划实现,使用Quartz类
本文链接:https://blog.csdn.net/youcheng_ge/article/details/123667723

【C#】《周计划管理关于产前准备模块》解决方案20200203
本文链接:https://blog.csdn.net/youcheng_ge/article/details/122919543

【C#】源码解析的正则表达式
本文链接:https://blog.csdn.net/youcheng_ge/article/details/118337074

【C#】软件版本和文件MD5记录(XML操作)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/112513871

【C#】如何测试网络是否连通
本文链接:https://blog.csdn.net/youcheng_ge/article/details/110137288

【C#】根据名称获取编码(Dictionary获取key方法)
本文链接:https://blog.csdn.net/youcheng_ge/article/details/129816701

【Inno Setup】安装包制作,项目打包方案

 本文链接:https://blog.csdn.net/youcheng_ge/article/details/123665633

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/youcheng_ge/article/details/126539836

智能推荐

JScript 是 JavaScript 的缩写吗?_javascript的小写缩写是?-程序员宅基地

文章浏览阅读3.3k次。JScript 是 JavaScript 的缩写吗? 资策会数字教育研究所讲师 杨宏文  很多人都误以为JScript就是JavaScript的缩写,这一点是需要澄清的,让笔者先讲一段故事。 在Web Scripting language世界中第一个诞生的是,由网景公司(NetScape)所催生的JavaScript。到_javascript的小写缩写是?

iOS开发-设置启动图片LaunchImage_ios创建 launchimage-程序员宅基地

文章浏览阅读1.3k次。通常app在开启的时候都会有自己的启动图片,下面就开始设置app的启动图片。第一步:在图片资源包里创建LaunchImage。然后就创建好了LaunchImage,只不过一开始是空的,而这里我已经添加好了图片。注意:一定要按照尺寸添加全部图片,不然会报错。附上:iOS-AppIcon和LaunchImage尺寸附上仅供学习使用:配置好一部分的LaunchImage下载..._ios创建 launchimage

Mock进行单元测试_单体测试用mock吗-程序员宅基地

文章浏览阅读2.6k次,点赞4次,收藏17次。中文文档参考地址,点击这里汪文君Mockito实战视频汪文君Mockito源码,点击这里@InjectMocks用来修饰被测试的类:就是对哪个类中的方法进行单元测试的时候,就用该注解修饰这个类。InjectMocks创建这个类的对象并自动标记@Mock,@Spy等注解的属性注入到这个中。要求必须是类不能是接口。使用1.Maven<!-- https://mvnrepository.com/artifact/org.mockito/mockito-all --> &l_单体测试用mock吗

.tar.gz 跟.tgz_tgz和tar.gz-程序员宅基地

文章浏览阅读2.6k次。.tar.gz 跟.tgz 是一种格式吗?tar.gz_百度百科以.tar.gz为后缀的文件是一种压缩文件,在Linux和macOS下常见,Linux和macOS都可以直接解压使用这种压缩文件。_tgz和tar.gz

yolov3代码详细解读_yolov3代码详解-程序员宅基地

文章浏览阅读3.4k次,点赞15次,收藏73次。下文所有代码:https://pan.baidu.com/s/1p-Q-edFXXcvzxlZNd9saOw 提取码:x72s原理可以参考:yolov1-v5学习笔记及源码解读目录1 目录结构2 train.py2.1 数据读取 dataset.py2.2 网络搭建 models.py2.2.1 搭建模型2.2.2 yolo层的实现2.2.3 darknet进行模型前向传播3 test.py4 detect.py5 功能脚本5.1 utils.py:5.2 logger.py5.3 augment._yolov3代码详解

一步步制作Arduino智能小车_arduino小车-程序员宅基地

文章浏览阅读1.4w次,点赞21次,收藏285次。小白第一次实战_arduino小车

随便推点

Java购物小系统(使用最基础的语法实现的控制台购物系统)_java控制台采购系统-程序员宅基地

文章浏览阅读2.6k次。自述:本人是一名卑微专科大一软件技术学生,目前学习Java已经快三个月了吧,在这里给大家分享一下我的学习成果,希望看到的大佬可以给我一些建议,也希望这篇文章能给正在学习Java的小伙伴一些练习的途径:程序执行的入口是(InSystem.java)文件总共分为十一个Java文件 客户信息管理 添加客户信息 创建一个客户类,里面声明客户应具备的客户信息,如:客户编号、客户姓名、客户电话、客户积分等,声明该类的对象数组,利用对象数组存储客户的信息,_java控制台采购系统

Android开发 轻量缓存框架--ASimpleCache_android 轻量缓存文件-程序员宅基地

文章浏览阅读339次。做Android应用开发的同学们相信对“缓存”这个词不陌生,缓存可能有多方面的概念,这里大概列举下程序开发的缓存大概有哪些:1.服务端控制缓存如volley请求库,便是通过服务端的“Cache-Control”和“max-age”来告诉客户端有没有缓存以及缓存的时间,也是推荐的使用方式,但是需要服务端配合,比较灵活。2.客户端直接控制缓存有些时候不需要服务端来支持的_android 轻量缓存文件

《机器人动力学与控制》第七章—路径规划与避障 7.3 工作空间下使用人工势场法进行路径规划_排斥势场-程序员宅基地

文章浏览阅读1.8k次。上一节我们发现,在关节空间下,很难获得一个直白的障碍物空间QO的表达,也很难在关节空间下评估人工势场的梯度。事实上,对于一个曲面,一般来说并不存在一个描述点到曲面的闭合表达式。即便我们能够表达清楚QO,仍然很难获得关节空间下的梯度ρ。为了解决这些问题,我们将对上一节说到的人工势场法做出一点改进,使势场方程定义在工作空间 W 而不是关节空间 Q。本节我们会先讲解如何一个在工作空间里正确地描述势场,..._排斥势场

CSS学习笔记-程序员宅基地

文章浏览阅读166次,点赞2次,收藏6次。CSS学习笔记本文章是基于B站pink老师的视频和PPT,结合个人认为重点的部分以及自身模糊的知识点进行归纳。一、CSS(1)1. CSS简介CSS 是层叠样式表 ( Cascading Style Sheets ) 的简称。有时我们也会称之为 CSS 样式表或级联样式表。CSS 是也是一种标记语言 。2. CSS基础选择器2.1 选择器分类选择器分为基础选择器和复合选择器两个大类,我们这里先讲解一下基础选择器。基础选择器是由单个选择器组成的基础选择器又包括:标签选择器、 类选

北斗卫星与GPS介绍_北斗系统能获取z轴数据了吗-程序员宅基地

文章浏览阅读3.3k次。学习过空间解析几何的同学都知道,在一个立体直角坐标系中,任何一个点的位置都可以通过三个坐标数据X、Y、Z来得到确定。也就是说,只要能得到X、Y、Z三个坐标数据,就可以确知任何一点在空间中的位置。如果能测得某一点与其它三点A、B、C的距离,并确知A、B、C三点的坐标,就可以建立起一个三元方程组,解出该未知点的坐标数据,从而得到该点的确切位置。  GPS就是根据这一原理,在太空中建立了一个由24颗_北斗系统能获取z轴数据了吗

Java word导出,可导出一份word或多页word内容_有模板的word导出 需要导出多份 一个文件 java-程序员宅基地

文章浏览阅读6.4k次。一步步按着写,图片看不清的,右键打开新标签页查看图片,谢谢htmla href="javascript:void(0)" class="easyui-linkbutton" plain="true" id="btn_customOpen">导出worda>前端js(ids为传递参数)$.messager.confirm('温馨提示','确认打印选中用户信息!',functio_有模板的word导出 需要导出多份 一个文件 java