我有一个部分视图显示在非HTTPS页面上,但POSTS显示在需要SSL的控制器上。表单定义如下:
<form id="authForm"
method="post"
action="@Url.Action("authenticate", "auth", new {}, "https")">
我遇到的问题是,在Visual Studio中和调试时,主机和端口是localhost:64043
。但是,上面的Url.Action
调用不会将端口号放入,这意味着浏览器会指向我的IIS安装。我是否必须添加其他内容,或覆盖此方法?我希望我的应用程序与位置无关。
提前致谢!
答案 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,则将省略。
>