控制器中的 Url.Action 两次生成端口

Posted

技术标签:

【中文标题】控制器中的 Url.Action 两次生成端口【英文标题】:Url.Action in controller generates port twice 【发布时间】: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 两次。可能的解决方案是什么?为什么会这样?

【问题讨论】:

【参考方案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 大声笑,如果它对您不起作用,只需在 *** 上创建您自己的问题并将其放在不起作用的地方。对于这个,它正在为 OP 工作。谢谢,祝你有美好的一天。

以上是关于控制器中的 Url.Action 两次生成端口的主要内容,如果未能解决你的问题,请参考以下文章

剃刀页面视图模型类中的 Url.Action 备用

MVC - 将整个模型作为参数传递给 JavaScript 中的 Url.Action

Url.Action 未输出自定义映射控制器路由

Ajax调用从extjs到Yii action url不显示post数据

使用 Url.action 调用控制器方法时仅获取第一个参数值。

Url.Action:如何将参数从视图传递到控制器?