2012-03-21 85 views
3

我有一个表单发布到外部应用程序,我需要在该帖子中发送一个URL。但是,对于一些用户,URL是https://localhost/Home/MyAction而不是https://mysubdomain.domain.com/Home/Action。我一直无法重现这一点,但两位同事在我的同一网络上始终如一地获得了这一点。为什么Url.Action和Request.Url.Host返回“localhost”?

<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”, “家”,NULL, “https” 开头)
  • Url.Action( “MyAction”, “家” ,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的端口转发是否打破了它?

+0

听起来像IIS配置给我。我不认为MVC正在做任何特定的事情。 – Dismissile 2012-03-21 13:37:29

+1

只是为了清楚起见,应该是:''right? – Tr1stan 2012-03-22 13:58:07

+0

因此,此应用程序的用户正在通过相同的URL访问它,例如:“https:// mysubdomain.domain.com”? - 他们有没有机会拥有一些特定于其计算机或域帐户的唯一DNS条目? – Tr1stan 2012-03-22 14:10:13

回答

1

你在文章中提到端口转发。这个端口转发在哪里完成?如果它是在IIS框完成,是有可能有人配置的转发像这样:

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

会导致URL解析使用本地主机,但在内部,不会发生端口转发,所以正确的域已解决。