URI tidak valid: Format URI tidak dapat ditentukan


116

Saya terus mendapatkan kesalahan ini.

URI tidak valid: Format URI tidak dapat ditentukan.

kode yang saya miliki adalah:

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

Perbarui: konten dalam slct ftp.jt-software.net/style.css. Teks adalah .

Apa yang memberi? Bagaimana itu bukan format URI yang valid? Ini teks biasa.


Ini memberi tahu saya bahwa konten slct. Teks bukan Uri yang valid. Tapi memang begitu.

1
@jts: dapatkah Anda memposting URI yang menyinggung mungkin?
Mitch Wheat

Apakah Anda mendapatkan pengecualian saat membuat Uri dengan Uri baru atau saat mencoba menghapus file di server?
Simon

2
uri yang menyinggung adalah: ftp.jt-software.net/style.css

2
@jts, saya berasumsi bahwa suara negatif itu berasal dari orang-orang yang memberikan komentar dan menemukan bahwa Anda tidak memperbarui jawaban Anda. Catatan, Anda dapat mengedit pertanyaan Anda untuk membuatnya lengkap (dan menerima jawaban), agar SO tetap bersih. Anda hilang ftp://atau http://di URI Anda. Anda mendapatkan suara saya sekarang ;-)
Abel

Jawaban:


126

Mungkin membantu menggunakan konstruktor berbeda untuk Uri.

Jika Anda memiliki nama server

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

dan memiliki jalur Uri relatif untuk ditambahkan padanya, misalnya

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

Saat membuat Uri dari keduanya, saya mendapatkan pengecualian "format tidak dapat ditentukan" kecuali saya menggunakan konstruktor dengan argumen UriKind, yaitu

// 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

Periksa kemungkinan alasannya di sini: http://msdn.microsoft.com/en-us/library/z6c2z492(v=VS.100).aspx

EDIT:

Anda harus meletakkan awalan protokol di depan alamat, misalnya dalam kasus Anda "ftp: //"


3
Tidak ada yang salah sama sekali. Saya melakukan semuanya dengan sangat cepat, dan saya tidak sengaja mengklik tombol turun, dan dikatakan bahwa kecuali pertanyaan diedit saya tidak dapat membatalkannya, jadi jika Anda dapat dengan ramah mengedit pertanyaan Anda atau sesuatu, saya dapat memberi suara ulang kepada Anda :) Maaf tentang itu :-( Saya tidak bermaksud untuk

voting kembali, bukan jts. Sejak yang terakhir menghilang :)
Andy

1
@Simon, saya baru saja memilih Anda NAIK lagi, maaf atas penundaan BESAR! Anda dapat memukul saya 2 kali lol

13

Kedengarannya seperti uri yang nyata. Saya mengalami masalah ini saat melakukan Silverlight lintas browser; di blog saya, saya menyebutkan solusi: berikan "konteks" uri sebagai parameter pertama.

Jika uri bersifat realtive, konteks uri digunakan untuk membuat uri penuh. Jika uri itu absolut, maka konteks uri diabaikan.

EDIT: Anda memerlukan "skema" di uri, misalnya, "ftp: //" atau "http: //"


12

Penggunaan yang lebih baik Uri.IsWellFormedUriString(string uriString, UriKind uriKind). http://msdn.microsoft.com/en-us/library/system.uri.iswellformeduristring.aspx

Contoh: -

 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
Ini tidak memberikan solusi. Ini hanya memeriksa apakah URI sudah benar dan jika demikian, itu terus berlanjut.
Alexandru Dicu

8

Saya mengatasi ini dengan menggunakan UriBuilder sebagai gantinya.

UriBuilder builder = new UriBuilder(slct.Text);

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

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.