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
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.
Essayez: SPContext.Current.File . rl
Vous pouvez également utiliser HttpContext.Current . Request.Url
Essayez: SPContext.Current.Web.Url + "/" + SPContext.Current.File.Url
Cela devrait retourner ce dont vous avez besoin SPContext.Current.ListItemServerRelativeUrl
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();
}
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;
}
}
string filename = Path.GetFileName(Request.Path);