Недопустимый URI: формат URI не может быть определен

Я продолжаю получать эту ошибку.

Invalid URI: The format of the URI could not be determined.

код, который у меня есть:

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

EDIT: содержимое в slct.Text ftp.jt-software.net/style.css.

Что дает? Как этот недопустимый формат URI? Это простой текст.

Ответ 1

Это может помочь использовать другой конструктор для Uri.

Если у вас есть имя сервера

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

и иметь относительный путь Uri для добавления к нему, например

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);

Ответ 3

Лучше использовать 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

Похоже, это может быть реальный ури. Я столкнулся с этой проблемой при использовании кросс-браузера Silverlight; на моем blog Я упомянул обходное решение: передайте "контекстный" uri в качестве первого параметра.

Если uri является realtive, контекстный uri используется для создания полного uri. Если uri является абсолютным, то контекстный uri игнорируется.

РЕДАКТИРОВАТЬ: Вам нужна "схема" в uri, например, "ftp://" или "http://"

Ответ 5

Я работал над этим, используя UriBuilder.

UriBuilder builder = new UriBuilder(slct.Text);

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