URI ไม่ถูกต้อง: ไม่สามารถกำหนดรูปแบบของ URI ได้


116

ฉันได้รับข้อผิดพลาดนี้เรื่อย ๆ

URI ไม่ถูกต้อง: ไม่สามารถกำหนดรูปแบบของ URI ได้

รหัสที่ฉันมีคือ:

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

UPDATE:เนื้อหาใน slct.Text ftp.jt-software.net/style.cssคือ

สิ่งที่ช่วยให้? นั่นไม่ใช่รูปแบบ URI ที่ถูกต้องอย่างไร เป็นข้อความธรรมดา


กำลังบอกเนื้อหาของ slct ข้อความไม่ใช่ Uri ที่ถูกต้อง แต่มันคือ.

1
@jts: คุณโพสต์ URI ที่ไม่เหมาะสมได้ไหม
Mitch Wheat

คุณได้รับข้อยกเว้นเมื่อสร้าง Uri ด้วย Uri ใหม่หรือเมื่อพยายามลบไฟล์บนเซิร์ฟเวอร์หรือไม่?
Simon

2
uri ที่กระทำผิดคือ ftp.jt-software.net/style.css

2
@jts ฉันคิดว่าการโหวตลงคะแนนเหล่านั้นมาจากคนที่แสดงความคิดเห็นและพบว่าคุณไม่ได้อัปเดตคำตอบของคุณ หมายเหตุคุณสามารถแก้ไขคำถามของคุณเพื่อทำให้สมบูรณ์ (และยอมรับคำตอบ) เพื่อให้ SO สะอาด คุณหายไปftp://หรือhttp://อยู่ใน URI ของคุณ คุณได้รับการโหวตของฉันตอนนี้ ;-)
Abel

คำตอบ:


126

อาจช่วยในการใช้ตัวสร้างอื่นสำหรับ 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);

59

ตรวจสอบสาเหตุที่เป็นไปได้ที่นี่: http://msdn.microsoft.com/en-us/library/z6c2z492(v=VS.100).aspx

แก้ไข:

คุณต้องใส่คำนำหน้าโปรโตคอลไว้ด้านหน้าที่อยู่เช่นในกรณีของคุณ "ftp: //"


3
ไม่มีอะไรผิดพลาดเลย ฉันกำลังทำทุกอย่างอย่างรวดเร็วและเผลอคลิกปุ่มลงโดยไม่ได้ตั้งใจและมันก็บอกว่าถ้าคำถามนั้นไม่ได้รับการแก้ไขฉันไม่สามารถยกเลิกได้ดังนั้นหากคุณสามารถแก้ไขคำถามหรือบางอย่างได้โปรดฉันสามารถโหวตให้คุณอีกครั้งได้ :) ขอโทษด้วย ประมาณนั้น :-( ฉันไม่ได้ตั้งใจจะ

โหวตกลับแทน jts ตั้งแต่ตอนหลังหายไป :)
Andy

1
@Simon ฉันเพิ่งโหวตให้คุณอีกครั้งขอโทษที่ล่าช้ามาก! คุณสามารถต่อยฉัน 2 ครั้ง lol

13

ฟังดูอาจจะเป็นอูริจริง ฉันพบปัญหานี้เมื่อใช้ Silverlight ข้ามเบราว์เซอร์ ในบล็อกของฉันฉันพูดถึงวิธีแก้ปัญหา: ส่ง "บริบท" uri เป็นพารามิเตอร์แรก

ถ้า uri เป็นจริงบริบท uri จะถูกใช้เพื่อสร้าง uri แบบเต็ม หาก uri เป็นค่าสัมบูรณ์บริบท uri จะถูกละเว้น

แก้ไข:คุณต้องมี "รูปแบบ" ใน uri เช่น "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 ถูกต้องหรือไม่และหากเป็นเช่นนั้นก็จะดำเนินการต่อ
Alexandru Dicu

8

ฉันแก้ไขสิ่งนี้โดยใช้UriBuilderแทน

UriBuilder builder = new UriBuilder(slct.Text);

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.