Url.Action不包括端口号

时间:2011-07-17 10:02:28

标签: c# asp.net-mvc-3 https

我有一个部分视图显示在非HTTPS页面上,但POSTS显示在需要SSL的控制器上。表单定义如下:

        <form id="authForm"
          method="post"
          action="@Url.Action("authenticate", "auth", new {}, "https")">

我遇到的问题是,在Visual Studio中和调试时,主机和端口是localhost:64043。但是,上面的Url.Action调用不会将端口号放入,这意味着浏览器会指向我的IIS安装。我是否必须添加其他内容,或覆盖此方法?我希望我的应用程序与位置无关。

提前致谢!

4 个答案:

答案 0 :(得分:10)

您可以像这样包含它:

@Url.Action(
    "authenticate", 
    "auth", 
    null, 
    "https", 
    Request.Url.Host + ":" + Request.Url.Port
)

当然这意味着您的本地Web服务器必须支持SSL,而Cassini则不然。您可以使用IIS Express来实现此目的。

答案 1 :(得分:0)

集成开发服务器不支持HTTPS,但您可以使用本地IIS - 请参阅HERE

答案 2 :(得分:0)

Http和https连接通常位于两个不同的端口上,因此如果您从一个协议更改为另一个协议,您需要使用标准端口或自己提供特定端口。通用系统无法确定正确的端口

答案 3 :(得分:0)

使用Request.Host.ToUriComponent()

string actionUrl = Url.Action("Action", "Controller", new { blah = "" }, Request.Scheme, Request.Host.ToUriComponent());

当它是方案的默认端口时,这也正确地省略了端口号,即如果方案为 HTTP 且端口为 80,或方案为 HTTPS 且端口为 443,则将省略。

>