【问题标题】:Url.Action not including port numberUrl.Action 不包括端口号
【发布时间】:2011-07-17 10:02:27
【问题描述】:

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

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

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

提前致谢!

【问题讨论】:

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


    【解决方案1】:

    你可以像这样包含它:

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

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

    【讨论】:

    • 嗨,非常感谢。原来已经安装了 IIS Express。但是,我现在遇到的问题是,尽管 IIS 显示已安装 Express 证书,但当它尝试发布表单时,我收到 Unable to make a secure connection to the server. This may be a problem with the server or it may be requiring a client authentication certificate that you don't have. 错误...啊!
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        使用Request.Host.ToUriComponent():

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

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

        【讨论】:

          猜你喜欢
          • 2011-03-22
          • 2013-10-07
          • 2011-12-09
          • 2021-10-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-05-29
          • 1970-01-01
          相关资源
          最近更新 更多