Недійсний URI: Формат URI не вдалося визначити


115

Я продовжую отримувати цю помилку.

Недійсний URI: Формат URI не вдалося визначити.

код у мене є:

Uri uri = new Uri(slct.Text);
if (DeleteFileOnServer(uri))
{
    nn.BalloonTipText = slct.Text + " has been deleted.";
    nn.ShowBalloonTip(30);
}

Оновлення: вміст у slct.Text є ftp.jt-software.net/style.css.

Що дає? Як це не допустимий формат URI? Це звичайний текст.


Це говорить мені про вміст slct.Text не є дійсним Uri. Але це.

1
@jts: Ви могли б опублікувати URI, що порушує вас, можливо?
Мітч Пшеничний

Ви отримуєте виняток під час створення Uri з новим Uri або при спробі видалити файл на сервері?
Саймон

2
Ури

2
@jts, я припускаю, що ці голоси надходять від людей, які залишили коментар і з'ясували, що ви не оновили свою відповідь. Зауважте, ви можете відредагувати своє запитання, щоб воно було завершено (і прийняти відповіді), щоб ТО було чисто. Ви пропали без реєстрації ftp://або http://у своєму URI. Ви отримаєте мій голос зараз ;-)
Abel

Відповіді:


126

Це може допомогти використовувати інший конструктор для Uri.

Якщо у вас є ім’я сервера

string server = "http://www.myserver.com";

і мають відносний шлях Урі для додавання до нього, наприклад

string relativePath = "sites/files/images/picture.png"

Створюючи Uri з цих двох, я отримую виняток "формат не міг бути визначений", якщо я не використовую конструктор з аргументом UriKind, тобто

// this works, because the protocol is included in the string
Uri serverUri = new Uri(server);

// needs UriKind arg, or UriFormatException is thrown
Uri relativeUri = new Uri(relativePath, UriKind.Relative); 

// Uri(Uri, Uri) is the preferred constructor in this case
Uri fullUri = new Uri(serverUri, relativeUri);

59

Тут можна ознайомитись із можливими причинами: http://msdn.microsoft.com/en-us/library/z6c2z492(v=VS.100).aspx

Редагувати:

Ви повинні поставити префікс протоколу перед адресою, тобто у вашому випадку "ftp: //"


3
Нічого нічого поганого. Я все робив дуже швидко, і я випадково натиснув кнопку вниз, і вона сказала, що, якщо питання не буде відредаговане, я не можу його скасувати, тож, якщо ви зможете відредагувати своє запитання чи щось таке, я можу вам повторно подати заявку :) Так вибачте з цього приводу :-( Я не хотів вас

голосування назад замість jts. Оскільки останній зник :)
Енді

1
@Simon, я просто проголосував за тебе знову, вибачте за ВЕЛІЧНУ затримку! Ви можете вдарити мене два

13

Здається, це може бути відносною урі. Я зіткнувся з цією проблемою, роблячи крос-браузер Silverlight; у своєму блозі я згадав вирішення проблеми: передайте «контекст» урі як перший параметр.

Якщо урі реалістичний, контекстний урі використовується для створення повного урі. Якщо урі абсолютний, контекстний урі ігнорується.

EDIT: Вам потрібна "схема" в урі, наприклад, "ftp: //" або "http: //"


12

Краще використовувати Uri.IsWellFormedUriString(string uriString, UriKind uriKind). http://msdn.microsoft.com/en-us/library/system.uri.iswellformeduristring.aspx

Приклад: -

 if(Uri.IsWellFormedUriString(slct.Text,UriKind.Absolute))
 {
        Uri uri = new Uri(slct.Text);
        if (DeleteFileOnServer(uri))
        {
          nn.BalloonTipText = slct.Text + " has been deleted.";
          nn.ShowBalloonTip(30);
        }
 }

4
Це не забезпечує рішення. Він просто перевіряє, чи правильний URI правильний, і якщо так, він продовжується.
Олександру Діку

8

Я працював над цим, використовуючи UriBuilder замість цього.

UriBuilder builder = new UriBuilder(slct.Text);

if (DeleteFileOnServer(builder.Uri))
{
   ...
}

2

Проблема для мене полягала в тому, що коли я отримав якесь доменне ім’я, у мене було:

cloudsearch -..-..- xxx.aws.cloudsearch ... [WRONG]

http: //cloudsearch-..-..-xxx.aws.cloudsearch ... [ВПРАВО]

сподіваюся, що це зробить роботу для вас :)

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.