【发布时间】: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 没有做任何具体的事情。
-
为了清楚起见,应该是:
<input type="hidden" name="URL" value="@Url.Action("MyAction", "Home", null, "https")" />对吧? -
所以 所有 这个应用程序的用户都通过相同的 url 访问它,例如:
https://mysubdomain.domain.com? - 他们不可能有一些特定于他们的计算机或域帐户的唯一 DNS 条目吗? -
@Tr1stan 正确。错字仅在我的问题中,而不是我的实际代码。固定的。还发布有关您的第二个问题的更新。
标签: asp.net asp.net-mvc url-action