.NET + Vue3 的前后端项目在IIS的发布
目录
一、发布准备
1、安装 IIS
2、安装 Windows Hosting Bundle(.NET Core 托管捆绑包)
3、安装 IIS URL Rewrite
二、项目发布
1、后端项目发布
2、前端项目发布
3、将项目部署到 IIS中
三、网站配置
1、IP配置
2、防火墙配置
3、跨域配置
4、web.config 文件配置
四、常见错误处理
1、CORS 错误
2、404.0错误
3、405错误
4、500.32错误
一、发布准备
想要发布一个项目,首先就要有一个可以正常运行的项目,这个肯定是必须的。废话不多说,下面跟着我一起在 IIS 发布一个项目吧。
1、安装 IIS
在搜索栏搜索 "windows 功能" ,打开找到里面的 “Internet Information serices” 和 “Internet Information Services 可承载的 Web 核心”。将其选上点击[确定]。
在安装 IIS 后,可以重启一下电脑,不然后面可能会报错。

2、安装 Windows Hosting Bundle(.NET Core 托管捆绑包)
点击官网下载 Windows Hosting Bundle
点击下载后安装,一直下一步傻瓜式安装。下同。
3、安装 IIS URL Rewrite
根据自己的电脑旋转下载 IIS URL Rewrite。
点击官网下载 IIS URL Rewrite
二、项目发布
1、后端项目发布
1)在项目中,右键项目,在弹出框中点击 [发布]。

2)选择 [文件夹] 后,点击 [下一步]

3)然后可以修改文件位置,点击 [完成]。

4)可以重命名文件夹,然后点击 [显示所有设置],进行设置。

5)设置 部署模式 和 目标运行时,设置后点击保存。
部署模式有两种模式,即依赖框架和独立,两者的区别大致为以来框架模式部署后需要目标电脑有运行环境,而独立模式部署后是一个独立的软件,可以直接使用而不需要用户另外安装运行环境。
重要:(踩坑)在设置 目标运行时 的时候,一定要根据自己的电脑来选择,不然后面部署后会报错。

6)最后点击 [发布],等待发布完成。

7)在发布完成后,项目文件中多了个 【publish】文件夹,里面全是发布好后的 .dll 文件和配置文件。这个文件夹名称与步骤 2)中的文件夹命名一致。

2、前端项目发布
在vue 项目的终端,使用命令 npm run build 打包项目。
npm run build
在命令执行完成之后,会在项目目录中有一个 dist 文件,这个就是前端打包好文件夹。

3、将项目部署到 IIS中
1)在 C 盘外的其它盘中新建一个文件夹,将前面发布项目得到的文件中的内容复制到这个文件夹中来。如果是放在 C盘,那么后面在文件操作的时候,会因为 IIS操作 C盘的权限带来功能上的错误,如文件的访问、修改和删除。

2)打开 IIS,在 IIS的 [网站] 中 [右键] 添加网站。在配置好网站后,点击 [确定] 后网站就创建成功了。这里端口一定要修改,避免端口已经被使用后出现报错。


3)在 [应用程序池] 中,选中部署的项目,分别设置 .NET CLR版本 和 托管管理模式。重启网站,就可以点击浏览网站了。

三、网站配置
1、IP配置
1)安装 win + R键,输入cmd打开命令行工具。
2)在命令行工具中输入 ipconfig 查看本机 IP 信息。
3)在 IIS 的网站中,选择部署的项目,点击 [绑定] ,分别配置 IP 地址。IP 地址为本地的 IP。

2、防火墙配置
项目部署后,如果想要在多台设备上进行访问,那么需要进行防火墙配置,允许其它设备访问服务器的网址的端口。
1)在防火墙设置中,点击 [高级设置]

2)在 [入站规则] 新建规则,选择 [端口] 后点击[下一步]。

3)根据需要,选择数据传输协议,配置端口。这里的端口是网站中配置的端口,必须保持一致。
下一步后,选择 [允许连接],然后在下一步,默认全部,然后再下一步,命名规则,并进行描述。

3、跨域配置
4、web.config 文件配置
Vue3使用 npm run build 命令发布后,生成的 dist中,可能会没有 web.config配置文件,需要我们手动配置。新建 web.config文件后复制进去即可。
<?xml version="1.0" encoding="UTF-8"?>
<configuration><system.webServer><rewrite><rules><rule name="Handle History Mode and custom 404/500" stopProcessing="true"><match url="(.*)" /><conditions logicalGrouping="MatchAll"><add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /><add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" /></conditions><action type="Rewrite" url="/" /></rule></rules></rewrite></system.webServer>
</configuration>
四、常见错误处理
1、CORS 错误
报 CORS错误是由浏览器的同源策略引起的,即跨域问题。有时候明明在后端代码中正确地配置了跨域,但是部署后它还是报这个错误,至于是什么原因,暂时还不知道是什么原因。既然知道这报这个错误是跨域的问题,那么只需要在后端项目的配置文件中配置跨域就可以了。
找到 web.config文件,添加下面代码。
<httpProtocol><customHeaders><!--响应类型 (用逗号隔开,对预检请求的应答中明确了客户端所要访问的资源允许使用的方法或方法列表GET,HEAD,POST,PUT,DELETE,CONNECT,OPTIONS,TRACE,PATCH)--><add name="Access-Control-Allow-Methods" value="GET,POST,PUT,DELETE,OPTIONS"/><!--响应头设置(用于预检请求中,列出了将会在正式请求的 Access-Control-Request-Headers 字段中出现的首部信息。注意以下这些特定的首部是一直允许的:Accept, Accept-Language, Content-Language, Content-Type (但只在其值属于 MIME 类型 application/x-www-form-urlencoded, multipart/form-data 或 text/plain中的一种时)无需特意声明。)--><add name="Access-Control-Allow-Headers" value="x-requested-with,content-type"/><!--响应头指定了该响应的资源是否被允许与给定的origin共享,对于不需具备凭证(credentials)的请求,服务器会以“*”作为通配符,从而允许所有域都具有访问资源的权限,如需指定域则可以设置允许跨域访问的网址。--><add name="Access-Control-Allow-Origin" value="*" /><remove name="X-UA-Compatible"/><!--<add name="X-UA-Compatible" value="IE=8;IE=10;IE=9"/>--><add name="X-UA-Compatible" value="IE=11;IE=10;IE=9"/></customHeaders>
</httpProtocol>
2、404.0错误
这个错误是你项目文件夹中没有项目导致的,看看你的网址指向的物理路径是否正确,在指向的这个文件夹中是否有项目存在。
3、405错误
网址部署好后,想测试网址的功能是否正常,发现网址的数据获取和新增功能都正常,但当修改和删除数据时,发现网址报405错误,这是什么原因造成的呢?
其实,这是因为 IIS默认注册了一个名为"WebDAVModule"的自定义HttpModule,它会默认拒绝 HTTP 的 PUT、DELETE请求,只允许 HTTP的 GET、POST请求。想要解决这个问题也很简单:
在 IIS的网站中,找到 [模块]后点击 [打开功能],找到 WebDAVModule,将其删除即可。


如果将 WebDAVModule 删除后发现还是报这个错误,那么在项目文件中,打开 web.config文件,在 system.webServer 里面添加 modules,将 HttpModule 移除。
<configuration><system.webServer><modules runAllManagedModulesForAllRequests="true"><remove name="webDAVModule"/></modules><system.webServer>
</configuration>
作用是移除 IIS 中的 "WebDAVModule" 模块,并允许所有请求运行托管模块。这个配置适用于需要使用 PUT 和 DELETE 请求的应用程序或需要托管模块对所有请求进行处理的情况。
4、500.32错误
1)在程序应用池中,找到对应的网站,在 [基础设置] 中把 [.NET CLR版本] 设置成 [五代码托管]和 [托管管理模式] 设置成 [集成] 。
2)然后在 [高级设置] 中,把 [启用 32位应用程序] 的值设置成 [false],然后下滑,找到 [标识],将 [标识] 的值设置成 [LocalSystem]。


完成上面的设置后,重启网站,如果开始报这个错误,那么就要考虑你的项目发布的问题了,重新发布一次项目。
重新发布项目时,要特别注意发布配置,[目标运行时] 的配置一定得跟 服务器的一致。

最近发布了一个项目,踩了很多坑,值得做一个笔记,免得以后还往坑里面跳。希望这个笔记能给读者带来帮助,如果你也在发布项目时踩了坑,欢迎在评论区分享,让我们一起避坑,一起学习成长。
好记性不如烂笔头,在学习的路上留下点痕迹。希望能给大家带来帮助,也期待您的点赞和讨论。
若有不足之处,还请斧正。
相关文章:
.NET + Vue3 的前后端项目在IIS的发布
目录 一、发布准备 1、安装 IIS 2、安装 Windows Hosting Bundle(.NET Core 托管捆绑包) 3、安装 IIS URL Rewrite 二、项目发布 1、后端项目发布 2、前端项目发布 3、将项目部署到 IIS中 三、网站配置 1、IP配置 2、防火墙配置 3、跨域配置…...
软件测试之压力测试
🍅 点击文末小卡片,免费获取软件测试全套资料,资料在手,涨薪更快 压力测试 压力测试是一种软件测试,用于验证软件应用程序的稳定性和可靠性。压力测试的目标是在极其沉重的负载条件下测量软件的健壮性和错误处理能力&…...
矩阵-矩阵置零
矩阵置零 给定一个 m x n 的矩阵,如果一个元素为 0 ,则将其所在行和列的所有元素都设为0 。请使用 原地 算法。在计算机科学中,一个原地算法(in-place algorithm)是一种使用小的,固定数量的额外之空间来转…...
【JavaScript】《JavaScript高级程序设计 (第4版) 》笔记-Chapter19-表单脚本
十九、表单脚本 表单脚本 JavaScript 较早的一个用途是承担一部分服务器端表单处理的责任。虽然 Web 和 JavaScript 都已经发展了很多年,但 Web 表单的变化不是很大。由于不能直接使用表单解决问题,因此开发者不得不使用JavaScript 既做表单验证…...
【C# 数据结构】队列 FIFO
目录 队列的概念FIFO (First-In, First-Out)Queue<T> 的工作原理:示例:解释: 小结: 环形队列1. **FIFO?**2. **环形缓冲队列如何实现FIFO?**关键概念: 3. **环形缓冲队列的工作过程**假设…...
论文笔记-WWWCompanion2024-LLM as Data Augmenters for Cold-Start Item Recommendation
论文笔记-WWW Companion 2024-Large Language Models as Data Augmenters for Cold-Start Item Recommendation 大语言模型作为冷启动项目推荐的数据增强器摘要1.引言2.前言3.LLMs作为数据增强3.1增强数据生成3.2成对比较损失 4.实验4.1实验设置4.2结果和分析4.3超参数实验 5.总…...
Java 语法新特性(Records、Pattern Matching、Sealed Classes)深度解析(11/17/21)✨
一、Records(Java 16) 📝 核心价值:简化不可变数据载体的定义 // 传统POJO vs Record public record User(String name, int age) {} // 自动生成:构造方法/equals()/hashCode()/toString() User user new User(&qu…...
QUdpSocket的readyRead信号只触发一次
问题 QUdpSocket的readyRead信号只触发一次。 原因 on_readyRead槽函数里必须读出现有数据后,才能触发新的事件。 解决办法 在on_readyRead槽函数里取出数据。 void MainWindow::on_readyRead() {qDebug() << "on_readyRead in";while (m_udp…...
jsherp importItemExcel接口存在SQL注入
一、漏洞简介 很多人说管伊佳ERP(原名:华夏ERP,英文名:jshERP)是目前人气领先的国产ERP系统虽然目前只有进销存财务生产的功能,但后面将会推出ERP的全部功能,有兴趣请帮点一下 二、漏洞影响 …...
测试data_management函数
测试data_management函数 这是我最近正在开发的AI工具信息平台的部门功能模块测试,基于streamlit架构。整理出来与大家分享,也为我以后自己回溯找到资源。 为了测试 data_management 函数并结合 Excel 文件中的 “Tools” 表单内容,我们需要…...
微信小程序---计划时钟设计与实现
微信小程序-计划时钟已上线,欢迎各位小伙伴的测试和使用~(微信小程序搜计划时钟即可使用) 在这篇博客中,我们将探讨如何在微信小程序中设计和实现一个任务管理功能,该功能允许用户添加、删除和查看任务。任务管理系统的核心是基于日期和时间的任务管理,可以设置任务的开…...
深度学习之图像回归(二)
前言 这篇文章主要是在图像回归(一)的基础上对该项目进行的优化。(一)主要是帮助迅速入门 理清一个深度学习项目的逻辑 这篇文章则主要注重在此基础上对于数据预处理和模型训练进行优化前者会通过涉及PCA主成分分析 特征选择 后…...
深入理解HttpSecurity的设计
一、HttpSecurity的应用 在前章节的介绍中我们讲解了基于配置文件的使用方式,也就是如下的使用。 也就是在配置文件中通过 security:http 等标签来定义了认证需要的相关信息,但是在SpringBoot项目中,我们慢慢脱离了xml配置文件的方式,在SpringSecurity中提供了HttpSecurity…...
15增减字符串匹配(贪心)思路解析+源码
文章目录 题目[](https://leetcode.cn/problems/di-string-match/)算法原理贪心证明源码总结题目 假设s="I D I D"也就是增降增降,在0-4中,每两个数存在这种方式数组为【1, 3,2, 4,0】;(如下图) 算法原理 解法:贪心 1.当遇到“I”:选择当前最小的那个数 2…...
Java NIO与传统IO性能对比分析
Java NIO与传统IO性能对比分析 在Java中,I/O(输入输出)操作是开发中最常见的任务之一。传统的I/O方式基于阻塞模型,而Java NIO(New I/O)引入了非阻塞和基于通道(Channel)和缓冲区&a…...
14.7 LangChain Experimental 模块解析:解锁 Auto-GPT 开发新范式
LangChain Experimental 模块解析:解锁 Auto-GPT 开发新范式 关键词:LangChain Experimental、Auto-GPT 实现、自主智能体开发、Agent 架构设计、实验性功能实践 1. LangChain Experimental 模块的定位与核心能力 模块定位解析: #mermaid-svg-4xz2OlZBUFjkBmqw {font-fami…...
wps中的js开发
严格区分大小写 /*** learn_js Macro*/ function test() {Range(D7).Value2Selection.Value2; // Selection.formula "100" }function Workbook_SheetSelectionChange(Sh, Target) {if(Sh.Name Sheet1) {test();}}function test2() {// 把I4单元格及其周边有数的单…...
day16_推荐系统和总结
文章目录 day16_推荐系统和总结一、推荐实现1、基于流行度推荐(掌握)1.1 近期热门商品推荐1.2 个人热门商品推荐 2、基于隐语义模型的协同过滤推荐(了解)2.1 ALS算法介绍2.2 推荐代码 3、基于物品的协同过滤推荐(了解&…...
一文说清楚编码、摘要、加密、公钥、私钥、解密、签名、验签
编码 对信息进行编码,没有信息损失,任何人都能通过编码方式对信息进行解码。例如 ASCII 码,base64 编码。 例如下面是 ASCII 编码表: 摘要 对信息计算摘要值,有信息损失,例如 md5 摘要,sh…...
Repeated Sequence
记suma[1]a[2]a[3]...a[n]。 该序列以a[1],a[2],a[3]....a[n]为循环节,明显的,问题可转化为:s%sum是否为该序列的某个连续子序列和。 断环为链。将a复制一份。 枚举a[i]为左端点的所有区间的和。再查找s是否存在。二分O&#x…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
线程同步:确保多线程程序的安全与高效!
全文目录: 开篇语前序前言第一部分:线程同步的概念与问题1.1 线程同步的概念1.2 线程同步的问题1.3 线程同步的解决方案 第二部分:synchronized关键字的使用2.1 使用 synchronized修饰方法2.2 使用 synchronized修饰代码块 第三部分ÿ…...
聊聊 Pulsar:Producer 源码解析
一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...
【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...
【JavaSE】绘图与事件入门学习笔记
-Java绘图坐标体系 坐标体系-介绍 坐标原点位于左上角,以像素为单位。 在Java坐标系中,第一个是x坐标,表示当前位置为水平方向,距离坐标原点x个像素;第二个是y坐标,表示当前位置为垂直方向,距离坐标原点y个像素。 坐标体系-像素 …...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
Xen Server服务器释放磁盘空间
disk.sh #!/bin/bashcd /run/sr-mount/e54f0646-ae11-0457-b64f-eba4673b824c # 全部虚拟机物理磁盘文件存储 a$(ls -l | awk {print $NF} | cut -d. -f1) # 使用中的虚拟机物理磁盘文件 b$(xe vm-disk-list --multiple | grep uuid | awk {print $NF})printf "%s\n"…...
安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)
船舶制造装配管理现状:装配工作依赖人工经验,装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书,但在实际执行中,工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...
Fabric V2.5 通用溯源系统——增加图片上传与下载功能
fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
