Geçersiz URI: URI'nin biçimi belirlenemedi


116

Bu hatayı almaya devam ediyorum.

Geçersiz URI: URI'nin biçimi belirlenemedi.

sahip olduğum kod:

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

Güncelleme: slct.Text içindeki içerik ftp.jt-software.net/style.css.

Ne oluyor? Bu nasıl geçerli bir URI biçimi değildir? Düz metin.


Bana slct.Text içeriğinin geçerli bir Uri olmadığını söylüyor. Ama bu.

1
@jts: Soruna neden olan URI'yi gönderebilir misiniz?
Mitch Wheat

URI'yi yeni URI ile oluştururken veya sunucudaki dosyayı silmeye çalışırken bir istisna mı alıyorsunuz?
Simon

2
sorun teşkil eden uri: ftp.jt-software.net/style.css

2
@jts, bu olumsuz oyların yorum bırakan ve cevabınızı güncellemediğinizi öğrenen kişilerden geldiğini varsayıyorum. ÇOK temiz tutmak için sorunuzu tamamlayacak (ve yanıtları kabul edecek) şekilde düzenleyebileceğinizi unutmayın. Eksik ftp://veya http://URI'nizdeydiniz. Oyumu şimdi al ;-)
Abel,

Yanıtlar:


126

Uri için farklı bir kurucu kullanmak yardımcı olabilir.

Sunucu adına sahipseniz

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

ve buna eklenecek göreli bir URI yoluna sahip olun, örneğin

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

Bu ikisinden bir Uri oluştururken, yapıcıyı UriKind bağımsız değişkeniyle kullanmadığım sürece "biçim belirlenemedi" istisnasını alıyorum, yani

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

Olası nedenleri buradan kontrol edin: http://msdn.microsoft.com/en-us/library/z6c2z492(v=VS.100).aspx

DÜZENLE:

Protokol önekini adresin önüne koymanız gerekir, yani sizin durumunuzda "ftp: //"


3
Hiç yanlış bir şey yok. Her şeyi gerçekten hızlı bir şekilde yapıyordum ve yanlışlıkla aşağı düğmesine tıkladım ve soru düzenlenmedikçe geri alamayacağımı söyledi, bu yüzden sorunuzu veya başka bir şeyi nazikçe düzenleyebilirseniz, size yeniden oy verebilirim :) Çok üzgünüm bunun hakkında :-( Size olumsuz oy vermek istemedim

jts yerine geri oylama. İkincisi kaybolan :) beri
Andy

1
@ Simon, sana tekrar YUKARI oyu verdim, BÜYÜK gecikme için özür dilerim! Bana 2 kez yumruk atabilirsin lol

13

Gerçek bir uri olabilir gibi görünüyor. Tarayıcılar arası Silverlight'ı kullanırken bu sorunla karşılaştım; Benim üzerinde bloga ben bir çözüm söz: İlk parametre olarak bir "bağlam" uri geçmektedir.

Eğer uri gerçek ise, uri bağlamı tam bir uri oluşturmak için kullanılır. Eğer uri mutlaksa, uri bağlamı yok sayılır.

DÜZENLEME: URI'de bir "şemaya" ihtiyacınız var, örneğin, "ftp: //" veya "http: //"


12

Daha iyi kullanım Uri.IsWellFormedUriString(string uriString, UriKind uriKind). http://msdn.microsoft.com/en-us/library/system.uri.iswellformeduristring.aspx

Misal :-

 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
Bu bir çözüm sağlamaz. Yalnızca URI'nin doğru olup olmadığını kontrol eder ve doğruysa devam eder.
Alexandru Dicu

8

Bunun yerine UriBuilder kullanarak bu sorunu çözdüm .

UriBuilder builder = new UriBuilder(slct.Text);

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

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.