Guruprasad J Rao
Guruprasad J Rao

Reputation: 29693

Url.Action in controller generates port twice

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?

Upvotes: 2

Views: 1017

Answers (1)

CodeNotFound
CodeNotFound

Reputation: 23250

Just replace HttpContext.Request.Url.Authority with HttpContext.Request.Url.Host.

Because :

  • HttpContext.Request.Url.Authority returns the Domain Name System (DNS) host name or IP address and the port number for a server.
  • HttpContext.Request.Url.Host returns 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.

Upvotes: 1

Related Questions