잘못된 URI : URI 형식을 확인할 수 없습니다.


115

이 오류가 계속 발생합니다.

잘못된 URI : URI 형식을 확인할 수 없습니다.

내가 가진 코드는 다음과 같습니다.

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

업데이트 : slct.Text의 내용은 다음같습니다.ftp.jt-software.net/style.css .

무엇을 제공합니까? 유효한 URI 형식이 아닌 이유는 무엇입니까? 일반 텍스트입니다.


slct.Text의 내용이 유효한 Uri가 아님을 알려줍니다. 하지만 그것은.

1
@jts : 문제가되는 URI를 게시 할 수 있습니까?
Mitch Wheat

새 Uri를 사용하여 Uri를 만들거나 서버에서 파일을 삭제하려고 할 때 예외가 발생합니까?
Simon

2
문제가되는 uri : ftp.jt-software.net/style.css

2
@jts, 나는 그 반대 투표가 댓글을 남긴 사람들로부터 나온 것으로 가정하고 답변을 업데이트하지 않았다는 것을 알았습니다. 질문을 편집하여 완전하게 만들고 답변을 수락하여 깔끔하게 유지할 수 있습니다. 누락 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 회 펀치 수 있습니다

13

실제 URI 인 것 같습니다. 크로스 브라우저 Silverlight를 수행 할 때이 문제가 발생했습니다. 내 블로그 에서 해결 방법을 언급했습니다. "context"uri를 첫 번째 매개 변수로 전달하는 것입니다.

uri가 현실적이면 컨텍스트 uri를 사용하여 전체 uri를 만듭니다. uri가 절대적이면 컨텍스트 uri가 무시됩니다.

편집 : "ftp : //"또는 "http : //"와 같이 uri에 "scheme"이 필요합니다.


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.