【问题标题】:Calling web api core asp.net from remote computer always gets 400 bad request从远程计算机调用 web api core asp.net 总是得到 400 错误请求
【发布时间】:2018-06-24 01:39:37
【问题描述】:

如果以前可以问过这个问题,我们深表歉意。我们已经从 StackOverflow 尝试了这个链接,但对我们也不起作用Bad Request - Invalid Hostname when accessing localhost Web API or Web App from across LAN

我们在其中一台笔记本电脑中配置了一个 .net core 2.0 web api,其 IP 地址如下:

并在 Windows 10 和 Visual Studio 2017 上运行

项目设置:

我们还修改了项目的应用程序主机配置文件,并在绑定上添加了机器的 IPAddress 和正确的端口

我们也运行以下命令 netsh https 添加 urlacl url=http://192.168.43.192:51785/ user=everyone netsh advfirewall 防火墙 add rule name="IISExpressWeb" dir=in protocol=tcp localport=51785 profile=private remoteip=localsubnet action=allow

我们在防火墙规则(入站/出站)中也包含了上述端口:

问题是,当我们从网络上的不同机器(不同的 ip 地址,可以是 Mac 或移动设备,通过端口 44350、ssl 或端口 51785)访问 web api 时,它总是返回错误

提前感谢您的帮助。

我目前正在路上工作并使用我的手机(在上图中作为路由器,因此 android 上没有 wifi 连接图标)。它在我连接到安卓手机wifi的mac上也是一样的。另外,如果我在家里使用固定路由器,我也会得到同样的结果。

我们甚至尝试从这里下载 Conveyor https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti

【问题讨论】:

  • 请提供文字而不是文字截图。您的 alt 文本实际上并未说明图像中的内容,因此您的问题是,我们在其中一台笔记本电脑中配置了一个 .net core 2.0 web api,其 ip 地址为:当前 .net 机器而不是向看不到您的图片的用户提供实际的 IP 地址。
  • 感谢BSMP,当前ip地址为192.168.43.192(项目所在机器和asp.net)
  • 您是否确认您实际上并没有到达远程机器并且它的代码正在返回 400?另外,您表示您尝试了 SO 链接,您是否按照答案中的链接启用 IIS Express 的远程访问?
  • 嗨,是的,我们确实尝试为 iis express 更新 applicationhosts 配置文件
  • 我用移动设备/远程计算机的 ssl 和 http 端口的示例再次修改了问题

标签: c# visual-studio-2017 asp.net-core-mvc-2.0


【解决方案1】:

您是否尝试过该帖子中提到的我们的扩展程序“Conveyor”?您可以从扩展对话框或https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti 获取 Conveyor,它可以修复来自 IIS Express 的 400 Bad Request 错误,而无需更改任何配置。

【讨论】:

    【解决方案2】:

    由于 IIS Express 无法接受远程连接,因此单独运行 Kestrel 并在 Program.cs 文件中设置 UseUrls

    WebHost.CreateDefaultBuilder(args) .UseStartup<Startup>() .UseUrls("http://*:[your port]")

    如果想使用 IIS Express:

    您需要转发端口,似乎这个东西检查连接是否发送与绑定的主机头匹配的主机头,如果未绑定,则为 127.0.0.1。

    • 停止 IIS Express
    • 打开.vs\config\applicationhost.config
    • 查找&lt;binding protocol="http" bindingInformation="*:[port]:localhost"&gt;
    • 改成:&lt;binding protocol="http" bindingInformation="*:[port]:" /&gt;

    • 从 cmd 创建端口转发:

    netsh interface portproxy add v4tov4 listenport=[new-port] listenaddress=* connectport=[the-port-iis-using] connectaddress=127.0.0.1

    • [new-port] 添加防火墙入站规则
    • 现在您可以使用 ip 和新端口远程调用 api

    【讨论】:

      猜你喜欢
      • 2013-06-17
      • 2020-11-13
      • 2015-11-28
      • 1970-01-01
      • 2021-09-20
      • 1970-01-01
      • 2017-12-07
      • 2018-04-07
      • 2019-06-21
      相关资源
      最近更新 更多