Uri.AbsolutePath путает путь с пробелами - PullRequest
12 голосов
/ 12 января 2009

В WinApp я просто пытаюсь получить абсолютный путь от объекта Uri:

Uri myUri = new Uri(myPath); //myPath is a string
//somewhere else in the code
string path = myUri.AbsolutePath;

Это прекрасно работает, если в моем исходном пути нет пробелов. Если там есть пробелы, строка искажается; например, «Документы и настройки» становится «Документы% 20 и% 20» и т. д.

Любая помощь будет оценена!

EDIT: LocalPath вместо AbsolutePath сделали свое дело!

Ответы [ 5 ]

12 голосов
/ 12 января 2009

Так и должно быть. Это называется кодированием URL. Это применимо, потому что пробелы в URL не допускаются.

Если вам нужен путь назад с включенными пробелами, вы должны вызвать что-то вроде:

string path = Server.URLDecode(myUri.AbsolutePath);

Вам не нужно ничего импортировать, чтобы использовать это в веб-приложении. Если вы получили ошибку, попробуйте импортировать System.Web.HttpServerUtility. Или вы можете назвать это так:

string path = HttpContext.Current.Server.URLDecode(myUri.AbsolutePath);
10 голосов
/ 12 января 2009

Он кодирует его так, как должен, вы, вероятно, могли бы UrlDecode, чтобы вернуть его с пробелами, но он не "искажен", он просто правильно кодирован.

Я не уверен, что вы пишете, но для преобразования его обратно в asp.net это Server.UrlDecode (путь). Вы также можете использовать LocalPath, а не AbsolutePath, если это приложение для Windows.

5 голосов
/ 24 июля 2013

Просто используйте вместо uri.LocalPath

2 голосов
/ 08 ноября 2010

У Uri также есть пара статических методов - EscapeDataString и EscapeUriString.

Uri.EscapeDataString(uri.AbsolutePath) также работает

0 голосов
/ 15 октября 2015

Использовать HttpUtility:

 HttpUtility.UrlDecode(uri.AbsolutePath)
...