我有一个表单发布到外部应用程序,我需要在该帖子中发送一个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的端口转发是否打破了它?
听起来像IIS配置给我。我不认为MVC正在做任何特定的事情。 – Dismissile 2012-03-21 13:37:29
只是为了清楚起见,应该是:''right? – Tr1stan 2012-03-22 13:58:07
因此,此应用程序的用户正在通过相同的URL访问它,例如:“https:// mysubdomain.domain.com”? - 他们有没有机会拥有一些特定于其计算机或域帐户的唯一DNS条目? – Tr1stan 2012-03-22 14:10:13