Встроенный идентификатор поля, безусловно, лучший путь, но он возвращает URL-адрес в закодированном виде, который может или не может быть тем, что вы хотите.
Я думаю, что лучший способ - добавить метод расширения в класс утилит:
public static string AbsoluteUrl(this SPFile File, bool Decode = true)
{
string EncodedUrl = File.Item[SPBuiltInFieldId.EncodedAbsUrl].ToString();
if (Decode)
return SPEncode.UrlDecodeAsUrl(EncodedUrl);
else
return EncodedUrl;
}
А затем позвоните следующим образом
Item.File.AbsoluteUrl();
, если вы хотите декодированный URL или
Item.File.AbsoluteUrl(false);
если вы хотите, чтобы URL-адрес оставался закодированным.
Обратите внимание, что значение параметра по умолчанию для декодирования будет доступно только в .Net4 + и, следовательно, только в SP2013, но вы можете легко создать метод перегрузки для SP2010. Вам также понадобится ссылка на пространство имен Microsoft.SharePoint.Utilities для доступа к классу SPEncode.