2010-11-27 20 views
24

¿Cómo puedo generar una URL absoluta desde el código C#?ASP.NET MVC crea la URL absoluta desde el código C#

Quiero generar una url como esta: localhost/{controller}/{action}/{id}. ¿Hay alguna manera de hacerlo en C# como cómo se puede hacer en las vistas?

No se generará dentro del controlador pero dentro de un ViewModel.

Respuesta

66
string absUrl = Url.Action("Index", "Products", null, Request.Url.Scheme); 

Solo agregue Request.Url.Scheme. Lo que hace es agregar un protocolo a la URL que lo fuerza a generar una URL absoluta.

+1

Gracias, esto estaba tan bien escondido que casi uso 'Url.RouteUrl'. – Peter

+3

Y si quiere generar una url totalmente calificada utilizando la sobrecarga Url.Action ("Index") (donde no especifica el controlador), simplemente pase ** null ** como parámetro del controlador. Esto lleva a: 'Url.Action (" Índice ", nulo, nulo, Request.Url.Scheme)'. –

0

Si no quiere "construir" la url y sólo desea la ruta completa de la página actual, esto va a hacer el truco

Context.Server.UrlEncode(Context.Request.Url.AbsoluteUri)

Yo sé que no es tan elegante como una extensión método, pero el pensamiento de compartirlo con fines educativos

0

en fecha más reciente actualización MVC se puede utilizar a continuación para overloadUrl.Action

string url=Url.Action("ActionName", "Controller", 
         new RouteValueDictionary(new { id= someid }), 
                 //url param 
         HttpContext.Request.Url.Scheme, 
         HttpContext.Request.Url.Host); 

que genera

http://localhost:port/Controller/ActionName?id=someid