2012-02-01 9 views
40

Estoy tratando de obtener una url asp.net típica que comience con el signo tilde ('~') para analizar en una URL completa completa comenzando por "http:"Obteniendo la URL completa de la URL con el signo tilde (~)

tengo esta cadena "~/PageB.aspx"

y quiero que sea convertido en "http://myServer.com/PageB.aspx"

sé que hay varios métodos para analizar las direcciones URL y obtener diferentes caminos de servidores y aplicaciones y tales . He intentado varios pero no he obtenido el resultado que quiero.

Respuesta

16

Si estás en un controlador de la página siempre se puede utilizar el método ResolveUrl para convertir la ruta relativa a una ruta específica del servidor. Pero si también desea la parte "http : //www.yourserver.se", deberá anteponer el Request.Url.Scheme y el Request.Url.Authority.

66

probar

System.Web.VirtualPathUtility.ToAbsolute("yourRelativePath"); 

Hay varias maneras que están disponibles en ASP.NET que podemos utilizar para resolver rutas relativas a un recurso en el lado del servidor y ponerlo a disposición en el lado del cliente. Sé de 4 maneras -

1) Request.ApplicationPath 
2) System.Web.VirtualPathUtility 
3) Page.ResolveUrl 
4) Page.ResolveClientUrl 

Buen artículo: Different approaches for resolving URLs in ASP.NET

+0

Tenga en cuenta que el http://refactoringaspnet.blogspot.com/2009/09/different-approaches-for-resolving-urls.html article _claims_ "VirtualPathUtility arrojará un error si hay parámetros de Query String en la URL", pero me parece que _does_ funciona correctamente, incluso con una cadena de consulta. – JonBrave

8
string.Format("http://{0}{1}", Request.Url.Host, Page.ResolveUrl(relativeUrl)); 
+0

información adicional: si necesita un número de puerto, úselo. string.Format ("http: // {0} {1}", Request.Url.Authority, Page.ResolveUrl (URLrelativa)) – user3035005

+0

Esto era útil, sin embargo, utiliza "href()" en la maquinilla de afeitar en lugar de Page.ResolveUrl() porque arroja una excepción de referencia nula. – neoscribe

4

Este método me parece el más agradable. Sin manipulación de cadenas, se puede tolerar ambas direcciones URL relativas o absolutas como entrada, y utiliza el mismo esquema exacto, la autoridad portuaria, y la ruta raíz que cualquiera que sea la petición actual está utilizando:

private Uri GetAbsoluteUri(string redirectUrl) 
{ 
    var redirectUri = new Uri(redirectUrl, UriKind.RelativeOrAbsolute); 

    if (!redirectUri.IsAbsoluteUri) 
    { 
     redirectUri = new Uri(new Uri(Request.Url.GetLeftPart(UriPartial.Authority) + Request.ApplicationPath), redirectUri); 
    } 

    return redirectUri; 
} 
+0

Si mezcla la información anterior con esta, 'System.Web.VirtualPathUtility.ToAbsolute (' yourRelativePath '); 'para resolver la ruta' ~/', luego use este método en el resultado de cadena de eso. Funciona. (suponiendo que no se necesita información del puerto) La combinación de estos funcionó para mí. – DiamondDrake

Cuestiones relacionadas