You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

从远程设备访问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证书:
    1. 打开MMC -> 添加/删除管理单元 -> 证书 -> 我的用户账户 -> 个人 -> 证书
    2. 找到"IIS Express Development Certificate",右键导出为.cer文件
    3. 将这个证书安装到Mac/移动设备的信任列表中(Mac在钥匙串访问里设置为始终信任,移动设备需要安装证书并开启信任)
  • 检查SSL证书的绑定,用命令:
    netsh http show sslcert ipport=0.0.0.0:44350
    
    如果没有绑定,用以下命令绑定(替换证书的Thumbprint,从MMC里查看证书的指纹):
    netsh 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:51785https://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

火山引擎 最新活动