为什么Url.Action和Request.Url.Host返回“localhost”?

时间:2012-03-21 12:31:22

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

我在页面上有一个表单,该表单发布到外部应用程序,我需要在该帖子中发送一个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的端口转发是否会破坏它?

1 个答案:

答案 0 :(得分:1)

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

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

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