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.

abatishchev
sumber
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);
CJBrew
sumber
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: //"

Simon
sumber
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: //"

Stephen Cleary
sumber
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);
        }
 }
Ashish Gupta
sumber
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))
{
   ...
}

sumber
2

Masalah bagi saya adalah ketika saya mendapatkan beberapa nama domain, saya memiliki:

cloudearch -..-..- xxx.aws.cloudsearch ... [SALAH]

http: //cloudsearch-..-..-xxx.aws.cloudsearch ... [KANAN]

semoga ini berhasil untuk Anda :)

WareN The GaMeR
sumber