Url.操作不包括端口号
本文关键字:口号 不包括 操作 Url | 更新日期: 2023-09-27 18:02:24
我有一个局部视图,它显示在一个非https页面上,但是post到一个需要SSL的控制器。表单定义如下:
<form id="authForm"
method="post"
action="@Url.Action("authenticate", "auth", new {}, "https")">
我遇到的问题是,在Visual Studio和调试时,主机和端口是localhost:64043
。但是,上面的Url.Action
调用没有输入端口号,这意味着浏览器将指向我的IIS安装。我是否需要添加其他东西,或者重写这个方法?我希望我的应用程序是位置无关的。
提前感谢!
你可以像这样包含它:
@Url.Action(
"authenticate",
"auth",
null,
"https",
Request.Url.Host + ":" + Request.Url.Port
)
当然,这意味着你的本地web服务器必须支持SSL,而卡西尼不是这样。您可以使用IIS Express来实现。
集成开发服务器不支持HTTPS,但您可以使用本地IIS -参见这里。
Http和https连接通常在两个不同的端口上,所以如果您从一种协议更改为另一种协议,您要么需要使用标准端口,要么需要自己提供特定端口。通用系统无法确定正确的端口
使用Request.Host.ToUriComponent()
:
string actionUrl = Url.Action("Action", "Controller", new { blah = "" }, Request.Scheme, Request.Host.ToUriComponent());
当端口号是方案的默认端口时,也会正确地省略端口号,即如果方案是HTTP,端口是80,或者方案是HTTPS,端口是443,它将被省略。