2009-10-09 13 views

Respuesta

33

Usted todavía puede obtener la HttpContext y luego usar HttpContext.Current.Request.Url

SPContext.Current.Web es el SPWeb que rodea la página activa, y por tanto su URL es el URL de la Web, no la página.

+7

Para ser claros, el parámetro completo a utilizar es System.Web.HttpContext.Current.Request.Url –

+1

Pues sí, la clase HttpContext está en el espacio de nombres System.Web – Yuliy

+5

Justo tenga cuidado si está haciendo eso con ManagedPaths y/_layouts/páginas de aplicaciones. ex./sites/1/_layouts/page.aspx será /_layouts/page.aspx – HaavardMeling

3

Probar: SPContext.Current.Web.Url + "/" + SPContext.Current.File.Url

1

Esto debería devolver lo que usted requiere SPContext.Current.ListItemServerRelativeUrl

0
string filename = Path.GetFileName(Request.Path); 
-1
string PageTitle=SPContext.Current.File.Title 
1

este código funcionó para mí, para páginas bajo _layouts y también para páginas 'normales' en el sitio:

 string thisPageUrl; 
     if (HttpContext.Current.Request.Url.ToString().ToLower().Contains("_layouts")) 
     { 
      thisPageUrl = SPContext.Current.Web.Url + context.Request.Path; //note: cannot rely on Request.Url to be correct ! 
     } 
     else 
     { 
      thisPageUrl = HttpContext.Current.Request.Url.ToString(); 
     } 
+0

Esto excluirá una posible cadena de consulta. –

1

Yo uso la solución que cubre los casos _layouts

/// <summary> 
/// Builds real URL considering layouts pages. 
/// </summary> 
private Uri CurrentUrl 
{ 
    get 
    { 
     return Request.Url.ToString().ToLower().Contains("_layouts") 
      ? new Uri(
       SPContext.Current.Site.WebApplication.GetResponseUri(
        SPContext.Current.Site.Zone).ToString().TrimEnd('/') 
       + Request.RawUrl) 
      : Request.Url; 
    } 
} 
Cuestiones relacionadas