【问题标题】:Why do Url.Action and Request.Url.Host return "localhost"?为什么 Url.Action 和 Request.Url.Host 返回“localhost”?
【发布时间】:2012-03-21 12:31:21
【问题描述】:

我在一个页面上有一个发布到外部应用程序的表单,我需要在该帖子中发送一个 URL。但是,对于某些用户,URL 是https://localhost/Home/MyAction 而不是https://mysubdomain.domain.com/Home/Action。我无法重现这一点,但有两个同事和我在同一个网络上始终如一地得到这个。

<form action="https://externalapp.com/action.cgi" method="POST">
    ...
    <input type="hidden" name="URL" value="@Url.Action("MyAction", "Home", null, "https")"/>
    <input type="submit" value="Submit" />
</form>

我试过了:

  • Url.Action("MyAction", "Home", null, "https")
  • Url.Action("MyAction", "Home", null, "https", Request.Url.Host) // 如果您不指定主机,我相信这就是 MVC
  • Url.Action("MyAction", "Home", null, "https", Request.Url.Authority)
  • Url.Action("MyAction", "Home", null, "https", Request.Headers["host"]) // 如果使用非标准端口,该端口会在 URL 中出现两次(例如https://mysubdomain.domain.com:4430/Home/Action

为什么有些用户会看到 localhost 呢?没有用户从托管它的服务器访问此应用程序。

更新:在内部使用https://mysubdomain.domain.com:445/ 之类的端口号访问应用程序。在外部,它只是普通的 443:https://mysubdomain.domain.com/。对于内部用户,Url.Action 运行良好。对于外部用户,即使我将 mysubdomain.domain.com 指定为 Url.Action,它仍然会为使用端口 443 访问的用户返回 localhost。我查看了 MVC 代码,但不知道为什么它会覆盖我的主机名规范。

我检查了 IIS 中的 HTTPS 绑定,它使用了正确的 SSL 证书。我想知道从外部 443 到内部 445 的端口转发是否以某种方式破坏了它?

【问题讨论】:

  • 对我来说听起来像是 IIS 配置。我认为 MVC 没有做任何具体的事情。
  • 为了清楚起见,应该是:&lt;input type="hidden" name="URL" value="@Url.Action("MyAction", "Home", null, "https")" /&gt; 对吧?
  • 所以 所有 这个应用程序的用户都通过相同的 url 访问它,例如:https://mysubdomain.domain.com? - 他们不可能有一些特定于他们的计算机或域帐户的唯一 DNS 条目吗?
  • @Tr1stan 正确。错字仅在我的问题中,而不是我的实际代码。固定的。还发布有关您的第二个问题的更新。

标签: asp.net asp.net-mvc url-action


【解决方案1】:

您在帖子中提到了端口转发。这个端口转发是在哪里完成的?如果在 IIS 框上完成,是否有人像这样配置转发:

https://mysubdomain.domain.com:445 -> http://localhost:443

这会导致 url 解析使用本地主机,但在内部,不会发生端口转发,因此解析了正确的域。

【讨论】:

    猜你喜欢
    • 2010-12-28
    • 2019-06-15
    • 1970-01-01
    • 2014-06-23
    • 2011-10-17
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 2021-12-24
    相关资源
    最近更新 更多