【问题标题】:Url.Action in controller generates port twice on Server控制器中的 Url.Action 在服务器上生成两次端口
【发布时间】:2020-08-30 12:13:39
【问题描述】:

我推荐了this existing answer - 但它没有用。

我正在使用下面的代码生成一个完全限定的 url 并将其传递给脚本并使用该 url 进行重定向。

 @section Scripts
 {
    @Html.Script(@<script type="text/javascript">
    $(document).ready(function () {
        let targetUrl = '@Html.Raw(Url.Action("action", "controller",
            new RouteValueDictionary(new { Area = "Schemes" }),
            Request.Url.Scheme,
            Request.Url.Host))';

        let script = new ListScript(targetUrl);
        script.initialize();           
    });
    </script>)

}

http://servername:9565/Controller/ActionName //^^^^^ 添加了额外的端口 并附加端口号 9565 两次。可能的解决方案是什么?为什么会这样?

【问题讨论】:

  • 在ActionName后面添加端口?或在另一个端口之后。
  • 在另一个端口之后 - servername:9565/Controller/ActionName - (虚构的)服务器名称已经定义了一个端口。
  • 你是在视图还是控制器中生成 URL?它看起来像在视图中。
  • 在视图的脚本部分。

标签: c# asp.net-mvc-4 url.action


【解决方案1】:

在 Controller 中尝试以下操作。

var url = Url.Action("action", "controller", new RouteValueDictionary(new { Area = "Schemes" }), HttpContext.Request.Scheme); 

在视图中。

@Url.Action("Action", "Controller", new RouteValueDictionary(new { Area = "Schemes" }), Context.Request.Scheme, Context.Request.Host.ToString())

另外顺便说一句,你需要把 Url.Action 包装在 Html.Raw 中吗,你只需要字符串值 URL 对吗?

【讨论】:

  • 我们只是这样做,它没有工作,所以我们尝试使用 HttpContext.Request.Host,但也没有工作。
  • 这两者各自的价值是什么? HttpContext.Request.Scheme & HttpContext.Request.Host
  • 它也没有用。对不起。我想我必须通过脚本中的正则表达式来做到这一点。
  • 两个端口是否显示相同?您是否同时启用了 HTTP 和 HTTPS?
  • 是的,两个端口相同,启用了 HTTPS。
猜你喜欢
  • 2016-06-05
  • 1970-01-01
  • 2021-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-27
相关资源
最近更新 更多