从远程设备访问ASP.NET Core Web API持续返回400错误求助
解决跨LAN访问.NET Core 2.0 Web API的"Bad Request - Invalid Hostname"或连接失败问题
我来帮你梳理下可能遗漏的配置点,你已经做了不少基础操作,但咱们再一步步排查:
1. 确认launchSettings.json的核心配置
.NET Core项目的启动配置优先看launchSettings.json(在Properties文件夹下),这很容易被忽略:
- 找到
applicationUrl字段,修改为包含本地IP和0.0.0.0的地址,确保允许所有网卡访问:"applicationUrl": "http://0.0.0.0:51785;https://0.0.0.0:44350", - 检查
iisSettings下的sslPort是否和你用的44350一致,同时确保anonymousAuthentication设为true:"iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "sslPort": 44350, "iisExpress": { "applicationUrl": "http://localhost:51785", "sslPort": 44350 } }
2. 验证IIS Express绑定的正确性
你修改了applicationsHost.config,但要确认是项目对应的站点绑定:
- 这个文件通常在
%userprofile%\Documents\IISExpress\config\applicationsHost.config - 找到你的Web API项目对应的
<site>节点,确保<bindings>里同时包含localhost和你的IP:<bindings> <binding protocol="http" bindingInformation="*:51785:localhost" /> <binding protocol="http" bindingInformation="*:51785:192.168.43.192" /> <binding protocol="https" bindingInformation="*:44350:localhost" /> <binding protocol="https" bindingInformation="*:44350:192.168.43.192" /> </bindings> - 修改后必须重启Visual Studio和IIS Express,否则配置不会生效。
3. 修复SSL证书的信任与绑定问题
访问HTTPS端口时,其他设备可能因为证书不被信任或未绑定到指定IP导致失败:
- 先在本地用
https://192.168.43.192:44350访问,如果浏览器提示证书错误,导出IIS Express的SSL证书:- 打开MMC -> 添加/删除管理单元 -> 证书 -> 我的用户账户 -> 个人 -> 证书
- 找到"IIS Express Development Certificate",右键导出为.cer文件
- 将这个证书安装到Mac/移动设备的信任列表中(Mac在钥匙串访问里设置为始终信任,移动设备需要安装证书并开启信任)
- 检查SSL证书的绑定,用命令:
如果没有绑定,用以下命令绑定(替换证书的Thumbprint,从MMC里查看证书的指纹):netsh http show sslcert ipport=0.0.0.0:44350netsh http add sslcert ipport=0.0.0.0:44350 certhash=你的证书指纹 appid={214124cd-d05b-4309-9af9-9caa44b2b74a}
4. 强化防火墙规则配置
你之前的防火墙规则可能只覆盖了private网络,建议放宽到所有网络类型:
- 重新添加HTTP端口规则:
netsh advfirewall firewall add rule name="IISExpress-HTTP-51785" dir=in protocol=tcp localport=51785 profile=any remoteip=localsubnet action=allow - 添加HTTPS端口规则:
netsh advfirewall firewall add rule name="IISExpress-HTTPS-44350" dir=in protocol=tcp localport=44350 profile=any remoteip=localsubnet action=allow - 同时检查出站规则,确保允许这两个端口的流量出站(不过通常默认允许,但可以手动添加保险)。
5. 本地先验证,再跨LAN测试
- 先在你的Windows笔记本上,用
http://192.168.43.192:51785和https://192.168.43.192:44350访问,如果本地都无法访问,说明是本地配置问题(比如绑定错误、端口占用):- 检查端口占用:
netstat -ano | findstr :51785,如果有其他进程占用,杀掉进程或更换端口。
- 检查端口占用:
- 本地能访问后,再用其他设备测试,确保设备和笔记本在同一LAN下(IP段一致,比如都是192.168.43.x)。
6. 关于Conveyor工具的额外检查
如果你用了Conveyor,确保:
- Visual Studio以管理员身份运行,Conveyor需要权限配置端口和证书。
- 在Conveyor的面板中,确认显示的外部URL是
http://192.168.43.192:51785和对应的HTTPS地址,没有报错提示。
按照这些步骤逐一排查,应该能解决跨LAN访问的问题。
内容的提问来源于stack exchange,提问作者Travellogger




