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.操作不包括端口号

你可以像这样包含它:

@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,它将被省略。