В SharePoint как вы получаете URL страницы, на которой вы находитесь, из кода? например с включенной страницей blah.aspx ...
SPContext.Current.Web.Url дает http://vm/en/
Мне нужно это с http://vm/en/Pages/blah.aspx
Вы все еще можете получить HttpContext и затем использовать HttpContext.Current.Request.Url
HttpContext.Current.Request.Url
SPContext.Current.Web - это SPWeb, окружающий страницу, на которой вы находитесь, и, следовательно, его URL - это URL-адрес сети, а не страницы.
Попробуйте: SPContext.Current.File . Url
Вы также можете использовать HttpContext.Current . Request.Url
Попробуйте: SPContext.Current.Web.Url + "/" + SPContext.Current.File.Url
Я использую обходной путь, который охватывает случаи _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; } }
этот код работал для меня, для страниц под _layouts, а также для 'обычных' страниц сайта:
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(); }
Это должно вернуть то, что вам требуется. SPContext.Current.ListItemServerRelativeUrl
string PageTitle=SPContext.Current.File.Title
string filename = Path.GetFileName(Request.Path);