ASP.NET 网站项目发布到远程 IIS,报错:
Web 部署任务失败。(已使用指定的进程(“Web Management Service”)连接到远程计算机,但未能验证服务器的证书。如果你信任该服务器,请再次连接并允许不信任的证书。 在以下位置了解更多信息: https://go.microsoft.com/fwlink/?LinkId=221672#ERROR_CERTIFICATE_VALIDATION_FAILED。) ...参照错误信息中的网址,在项目文件中添加该配置:
<PropertyGroup>
<AllowUntrustedCertificate>true</AllowUntrustedCertificate>
</PropertyGroup>方法一:打开 事件查看器-> Windows 日志-> 应用程序。

方法二:启用ASP.NET Core Module Stdout 日志。
修改网站根目录下的 web.config 文件,在 <aspNetCore> 节点中启用标准输出日志。你需要先手动创建 logs 文件夹并确保有写入权限。
<aspNetCore processPath="dotnet"
arguments=".\YourAppName.dll"
stdoutLogEnabled="true"
stdoutLogFile=".\logs\stdout"
hostingModel="inprocess" />重现错误后,即可在 logs 目录下查看生成的日志文件。注意:出于性能考虑,问题解决后建议将 stdoutLogEnabled 设为 false。
个人整理,仅供参考。具体规格请以官方发布为准。
表格于 2025 年 11 月整理更新。
个人整理,仅供参考。具体规格请以官方发布为准。
|
|
|
|
|
|
|
|
|
|---|---|---|---|---|---|---|---|---|
| 名称 | BE10000 | BE7000 | BE6500 Pro | BE6500 | BE3600 Pro 套装 | BE3600 Pro 网线版 | BE10000 Pro | BE7200 Pro |
| 型号 |
主:RN04 子:RN01 |
主:RP01 子:RP03 |
||||||
| 上市时间 | 2022.10 | 2023.5 | 2023.10 | 2024.8 | 2024.10 | 2025.5 | 2025.9 | 2026.5 |
| 处理器 | Qualcomm 四核 A73 2.2GHz | Qualcomm 四核 A73 1.5GHz | Qualcomm 四核 A53 1.5GHz | Qualcomm 四核 A53 1.1GHz |
主/子: 高通 IPQ5312 四核 1.1GHz |
主/子: Qualcomm Dragonwing N7 |
Qualcomm A7 四核 1.8GHz | Qualcomm 四核 A55 1.8GHz |
| 内存 | 2GB | 1GB | 1GB | 512MB |
主/子:512MB 一说子是 128MB |
主:512MB 子:256MB |
2GB | 1G DRAM + 512MB Flash |
| 频段 | 2.4GHz、5.2GHz、5.8GHz | 2.4GHz、5GHz | 2.4GHz、5GHz | 2.4GHz、5GHz | 2.4GHz、5GHz | 2.4GHz、5GHz | 2.4GHz、5.2GHz、5.8GHz | 2.4GHz、5GHz |
| 组网 | 混合 Mesh | 混合 Mesh | 混合 Mesh | 混合 Mesh | 混合 Mesh | AC + AP | AI Mesh | AI Mesh |
| 天线 | 12根高增益天线 + 12路信号放大器 + NFC内置天线 | 7根外置高增益WiFi天线 + 1根内置高增益WiFi天线 + NFC内置天线 | 6根高增益WiFi内置天线 + 1根蓝牙内置天线 + 1根NFC内置天线 | 6根外置高增益Wi-Fi天线 | 主/子:4根内置天线 |
主:无 子:2根内置双频天线 |
12根高增益天线 + 12路信号放大器 | 8根高增益天线 + 8路信号放大器 |
| 中枢网关 | 不支持 | 不支持 | 支持 | 不支持 |
主:支持 子:不支持 |
主:支持 子:不支持 |
支持 | 支持 |
| 蓝牙网关 | 不支持 | 不支持 |
蓝牙 Mesh 1.0 100 台 + 蓝牙 100 台 升级固件后支持蓝牙 Mesh 2.0 |
蓝牙 Mesh 1.0 |
蓝牙 Mesh 1.0 200 台 + 蓝牙 100 台 |
主:不支持 子:蓝牙 Mesh 2.0 |
蓝牙 Mesh 2.0 200 台 + 蓝牙 100 台 |
蓝牙 Mesh 2.0 200 台 + 蓝牙 100 台 |
| 散热 | 主动散热 | 自然散热 | 自然散热 | 自然散热 | 自然散热 |
主:自然散热 子:主动散热 |
主动散热 | 自然散热 |
| 接口 |
4×2.5G 1×10G 1×10G SFP+ 1×USB 3.0 |
4×2.5G 1×USB 3.0 |
4×2.5G | 4×2.5G |
主/子: 1×2.5G 3×1G |
主:5×2.5G 子:2×2.5G |
4×2.5G 2×10G 1×M.2 1×USB 3.0 |
4×2.5G |
| Wi-Fi | Wi-Fi 7 | Wi-Fi 7 | Wi-Fi 7 | Wi-Fi 7 | Wi-Fi 7 |
主:无 子:Wi-Fi 7 |
Wi-Fi 7 | Wi-Fi 7 |
| MLO 多链路聚合 |
双频 4.3Gbps 5 GHz 和 5 GHz-Game |
双频 4.3Gbps 5 GHz 和 5 GHz-Game |
双频 3.6Gbps 2.4 GHz 和 5 GHz |
双频 3.57Gbps 2.4 GHz 和 5 GHz |
双频 3.57Gbps 2.4 GHz 和 5 GHz |
双频 2.4 GHz 和 5 GHz |
双频 4.3Gbps 5 GHz 和 5 GHz-Game |
双频 3.6Gbps 2.4 GHz 和 5 GHz |
|
价格 |
最新价格 | 最新价格 | 最新价格 | 最新价格 | 最新价格 | 最新价格 | 最新价格 | 最新价格 |
-
表格于 2025 年 10 月整理更新。
-
如果只考虑支持蓝牙 Mesh 2.0,那么有 BE3600 Pro 网线版 和 BE10000 Pro 可选,搭配其它 Mesh 路由器实现全屋 Wi-Fi 7 覆盖,搭配其它中枢网关或从网关设备实现全屋蓝牙 Mesh 2.0 覆盖。
-
如果考虑用 Xiaomi 中枢网关 来部署独立的中枢架构,那么选择路由器就没有限制了。
-
名称中带有“全屋”字样的通常以子母套装形式出售,子母路由配置通常不同。购买两台一模一样的普通 BE 路由器,就相当于组建了一套“不分子母”的 Mesh 套装。
-
名称中带有“Pro”字样的通常具备中枢网关功能。
.NET 项目发布到 Linux / CentOS / nginx 上,调用 RedirectToAction 方法跳转到 127.0.0.1:443,而不是正在访问的域名,怎么办?
打开该网站的 nginx 配置文件,找到反射代理配置(proxy_pass),将:
proxy_set_header Host 127.0.0.1:$server_port;改为
proxy_set_header Host $host;早前记录过在 CentOS 中部署 ASP.NET Core 网站,现在宝塔面板已经直接支持创建 .NET 网站了,再次记录一下。
本文环境:VS2022、.NET 9、宝塔面板v11。
一、在 VS 中创建一个 .NET 9 网站,项目名称例:WebApplication1
发布选项:

关于“生成单个文件”选项,若勾选,发布后的项目启动文件不带后缀名(.dll),尝试在宝塔面板 v11.0.0 中无法顺利启动。
二、在 Linux 服务器上创建目录:/www/wwwroot/WebApplication1/
将发布后的文件上传到这个目录上,最终的文件结构如下:

三、进入宝塔面板,在 网站-Net项目 中安装 .Net环境管理,这里以 9.0.201 为例:

四、添加项目
项目名称:随意
运行路径:项目所在目录,本例中为:
/www/wwwroot/WebApplication1启动命令:使用 dotnet 命令,dotnet 命令可以不使用全路径(/www/server/dotnet/9.0.201/dotnet),第一个参数是项目启动文件,--urls 是反向代理的服务器和端口。服务器名可以是*也可以是localhost。例:
dotnet WebApplication1.dll --urls=http://*:5000项目端口:与启动命令中的端口号一致
开机启动:一般会勾选
启动用户:尽量用 www,最小权限原则。

正常情况下,网站已启动,如果未启动,检查配置,根据报错内容排查问题。
五、配置网站
添加域名、SSL 证书等。
友情提示:
网站版本更新重新发布后,需要手动重启网站才能生效,习惯于发布到 IIS(会自动生效)的同学要特别注意。
新手尽量以空项目或默认项目来部署,避免因特殊原因导致一系列其它问题。
nginx 反向代理并不会转发所有 Header,需要手动配置。
AutoUpdater.NET 是一个开源库,专为 .NET 桌面应用程序设计,支持 Windows Forms 和 WPF 应用。它通过从服务器获取 XML 文件来检测新版本信息,当发现新版本时向用户显示更新对话框。
相对于 ClickOnce,AutoUpdater.NET 的配置更简单一些。
首先通过 NuGet 包管理器安装 Autoupdater.NET.Official,然后在应用程序入口点添加以下代码:
AutoUpdater.Start("http://yourserver.com/path/to/update.xml");XML 文件结构如下:
<?xml version="1.0" encoding="UTF-8"?>
<item>
<version>2.0.0.0</version> <!--必填:最新版本号-->
<url>http://yourserver.com/path/to/updatefile.zip</url> <!--必填:更新文件下载地址-->
<changelog>http://yourserver.com/path/to/changelog.txt</changelog> <!--可选:更新日志-->
<mandatory>False</mandatory> <!--可选:是否强制更新-->
</item>Windows Forms 在 Program.cs 文件的 Main() 方法中,WPF 在 App.xaml.cs 的 OnStartup() 中添加:
AutoUpdater.Start("http://yourserver.com/path/to/update.xml");
AutoUpdater.CheckForUpdateEvent += (e) =>
{
if (e.Error != null)
{
MessageBox.Show($"检查版本更新失败:{e.Error.Message}");
}
if (e.IsUpdateAvailable)
{
if (e.Mandatory.Value)
{
// 强制更新
AutoUpdater.DownloadUpdate(e);
}
else
{
// 可选更新
if (MessageBox.Show("发现新版本,是否立即更新?", "更新提示", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes)
{
AutoUpdater.DownloadUpdate(e);
}
}
}
};这样就能简单实现打开应用时判断是否有更新。具体用法参:GitHub
对于控制台应用程序,AutoUpdater.NET 并不直接支持。可以使用 GeneralUpdate 等轻量级自动更新库。
其它:
若希望通过标准安装流程(如添加到开始菜单),优先选择 ClickOnce,适合长期维护的内部工具。
若追求快速集成和无感更新,AutoUpdater.NET 更灵活。
无论哪种方案,务必对程序进行代码签名(如购买企业证书或生成测试证书),否则系统可能拦截安装。(你要允许来自未知发布者的此应用对你的设备进行更改吗)
可以购买“OV 代码签名”证书或“EV 代码签名”证书,注意:“代码签名证书”与“域名证书”互不通用。
| 方法/工具 | 发布时间 | 所属框架 | 命名空间/依赖项 | 编码标准 | 空格处理 | 严格性 | 适用场景 | 现代项目支持(.NET 6+) |
|---|---|---|---|---|---|---|---|---|
| HttpUtility.UrlEncode | 2002 | .NET Framework 1.0+ | System.Web(需引用 DLL) | x-www-form-urlencoded | + | 宽松 | 传统 ASP.NET WebForms | ❌ |
| Server.UrlEncode | 2002 | .NET Framework 1.0+ | System.Web(ASP.NET 页面内) | x-www-form-urlencoded | + | 宽松 | ASP.NET WebForms 页面内编码 | ❌ |
| Uri.EscapeDataString | 2005 | .NET Framework 2.0+ | System(核心库) | RFC 3986 | %20 | 严格 | 构造 URI 组件(路径、查询参数) | ✔️ |
| WebUtility.UrlEncode | 2012 | .NET Framework 4.5+ | System.Net(跨平台) | x-www-form-urlencoded | + | 宽松 | 非 Web 环境或兼容旧代码 | ✔️ |
| UrlEncoder.Default.Encode | 2016 | .NET Core 1.0+ | System.Text.Encodings.Web | RFC 3986 | %20 | 严格 | 现代应用,严格 URI 编码 | ✔️ |
关键选择原则
兼容旧代码 → HttpUtility.UrlEncode 或 WebUtility.UrlEncode。
严格 URI 规范 → Uri.EscapeDataString 或 UrlEncoder。
ASP.NET Core → UrlEncoder。
非 Web 或跨平台 → 弃用 System.Web,选择 System.Net 或 System.Text.Encodings.Web 中的方法。
打开 .csproj 项目文件,在 <PropertyGroup> 标签内添加:
<Version>
1.0.$([System.Math]::Floor($([System.DateTime]::Now.Subtract($([System.DateTime]::Parse('2000-01-01T00:00:00Z'))).TotalDays))).$([MSBuild]::Divide($([System.Math]::Floor($([System.DateTime]::Now.TimeOfDay.TotalSeconds))), 2))
</Version>最终生成的版本号示例: 1.0.9238.28518
其中,Major 与 Minor 是固定的,Build 是2000年1月1日至今的天数,Revision 是今天的秒数 / 2 所得的值。(为了防止数值超过 65535)
程序中获取版本号:
var version = Assembly.GetExecutingAssembly().GetName().Version!; // 当前类库
var version = Assembly.GetEntryAssembly()?.GetName().Version!; // 入口项目从版本号获取发布时间:
DateTime versionTime = new DateTime(2000, 1, 1).AddDays(version.Build).AddSeconds(version.Revision * 2);在解决方案资源管理器中找到 Properties/AssemblyInfo.cs 文件。该文件存放程序集版本信息。
修改版本号格式
将以下代码片段中的 AssemblyVersion 改为使用星号通配符(建议保留主版本和次版本号):
[assembly: AssemblyVersion("1.0.*")] // 自动生成构建号和修订号 // [assembly: AssemblyFileVersion("1.0.0.0")] // 注释或删除此行关闭确定性构建
用文本编辑器打开 .csproj 项目文件,在 <PropertyGroup> 标签内添加:
<Deterministic>false</Deterministic>此设置允许 MSBuild 生成动态版本号。
最终生成的版本号示例: 1.0.9238.28518
其中,Major 与 Minor 是固定的,Build 是2000年1月1日至今的天数,Revision 是今天的秒数 / 2 所得的值。(为了防止数值超过 65535)
程序中获取版本号:
var version = Assembly.GetExecutingAssembly().GetName().Version;从版本号获取发布时间:
DateTime versionTime = new DateTime(2000, 1, 1).AddDays(version.Build).AddSeconds(version.Revision * 2);查看 .NET Core / .NET 5+ 实现自动版本号的方法










