web-dev-qa-db-fra.com

SharePoint obtient l'URL complète de la page actuelle dans le code derrière

Dans SharePoint, comment obtenez-vous l'url de la page sur laquelle vous vous trouvez à partir du code derrière? par exemple. avec la page blah.aspx incluse ...

SPContext.Current.Web.Url donne http: // vm/en /

J'en ai besoin avec http: //vm/en/Pages/blah.aspx

22
raklos

Vous pouvez toujours obtenir le HttpContext, puis utiliser HttpContext.Current.Request.Url

SPContext.Current.Web est le SPWeb entourant la page sur laquelle vous vous trouvez, et donc son URL est l'URL du Web, pas la page.

35
Yuliy

Essayez: SPContext.Current.File . rl

Vous pouvez également utiliser HttpContext.Current . Request.Url

9
Alex Angas

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

3
Dinh Gia Khanh

Cela devrait retourner ce dont vous avez besoin SPContext.Current.ListItemServerRelativeUrl

1
pns

ce code a fonctionné pour moi, pour les pages sous _layouts et aussi pour les pages "normales" sous le site:

        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();
        }
1
Sean

J'utilise la solution de contournement qui couvre les cas de _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;
    }
}
1
Oleg Savelyev
 string filename = Path.GetFileName(Request.Path);
0
Mohamed.Abdo