问题
I am using below piece of code to generate a fully qualified url and pass it back as json for redirection.
returnUrl = Url.Action("ActionName", "Controller",
new RouteValueDictionary(new { type= returnUrl }),
HttpContext.Request.Url.Scheme,
HttpContext.Request.Url.Authority);
returnUrl will initially have a value either type1 or type2 which is why I have given type as returnUrl and then replacing its value with a generated url, but it generates
http://localhost:49518:49518/Controller/ActionName?type=type1
//^^^^^ Extra port added
and appends port number 49518 twice. What could be the possible solution to this? Why this is happening?
回答1:
Just replace HttpContext.Request.Url.Authority with HttpContext.Request.Url.Host.
Because :
HttpContext.Request.Url.Authorityreturns the Domain Name System (DNS) host name or IP address and the port number for a server.HttpContext.Request.Url.Hostreturns the DNS host name or IP address of the server.
In your code you are using an overload of Url.Action that accept the host name instead of the authority which contains the port.
With this fix your port will be automatically added and there will be not port duplication.
来源:https://stackoverflow.com/questions/35586598/url-action-in-controller-generates-port-twice