【问题标题】:Url.Action in controller generates port twice控制器中的 Url.Action 两次生成端口
【发布时间】:2016-06-05 19:47:38
【问题描述】:

我正在使用下面的代码生成一个完全限定的url 并将其作为json 传回以进行重定向。

returnUrl = Url.Action("ActionName", "Controller", 
                       new RouteValueDictionary(new { type= returnUrl }), 
                       HttpContext.Request.Url.Scheme, 
                       HttpContext.Request.Url.Authority);

returnUrl 最初将具有 type1type2 的值,这就是为什么我将类型指定为 returnUrl,然后将其值替换为生成的 url,但它会生成

http://localhost:49518:49518/Controller/ActionName?type=type1
                     //^^^^^ Extra port added

并附加端口号49518 两次。可能的解决方案是什么?为什么会这样?

【问题讨论】:

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


    【解决方案1】:

    只需将HttpContext.Request.Url.Authority 替换为HttpContext.Request.Url.Host

    因为:

    • HttpContext.Request.Url.Authority 返回服务器的域名系统 (DNS) 主机名或 IP 地址以及端口号
    • HttpContext.Request.Url.Host 返回服务器的 DNS 主机名或 IP 地址。

    在您的代码中,您使用了Url.Action 的重载,它接受主机名而不是包含端口的权限。

    通过此修复,您的端口将被自动添加,并且不会出现端口重复。

    【讨论】:

    • 这会在生产中按预期工作吗?我希望它应该.. :)
    • @CodeNotFound - 它对我不起作用,在服务器上,它仍在为我返回端口号。
    • @WriteTheCode 大声笑,如果它对您不起作用,只需在 StackOverflow 上创建您自己的问题并将其放在不起作用的地方。对于这个,它正在为 OP 工作。谢谢,祝你有美好的一天。
    猜你喜欢
    • 2020-08-30
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 2019-07-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多