2009-10-09 2 views

risposta

33

È ancora possibile ottenere il HttpContext e quindi utilizzare HttpContext.Current.Request.Url

SPContext.Current.Web è la SPWeb che circonda la pagina visualizzata, e quindi il suo URL è l'URL del Web, non la pagina.

+7

Giusto per essere chiari, il parametro completo da utilizzare è System.Web.HttpContext.Current.Request.Url –

+1

Ebbene sì, la classe HttpContext è nello spazio dei nomi System.Web – Yuliy

+5

Proprio fai attenzione se lo fai con ManagedPaths e/_layouts/pagine dell'applicazione. ex./sites/1/_layouts/page.aspx sarà /_layouts/page.aspx – HaavardMeling

3

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

1

Ciò dovrebbe restituire ciò che si richiede SPContext.Current.ListItemServerRelativeUrl

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

questo codice ha funzionato per me, per le pagine sotto _layouts e anche per le pagine 'normali' sotto il sito:

 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

Questo escluderà la stringa di query possibile. –

1

Io uso la soluzione che copre _layouts casi

/// <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; 
    } 
}