控制器中的 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
最初将具有 type1
或 type2
的值,这就是为什么我将类型指定为 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 两次生成端口的主要内容,如果未能解决你的问题,请参考以下文章
MVC - 将整个模型作为参数传递给 JavaScript 中的 Url.Action
Ajax调用从extjs到Yii action url不显示post数据