無効な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を投稿できますか?
ミッチウィート

新しいUriでUriを作成するとき、またはサーバー上のファイルを削除しようとするときに例外が発生しますか?
Simon、

2
問題のURIは次のとおりです。ftp.jt

2
@jts、私はそれらの反対票がコメントを残した人から来ていたと思います、そしてあなたはあなたの答えを更新しなかったことがわかりました。注:質問を編集して完全なものにし(回答を受け入れて)、SOをクリーンに保つことができます。URI が見つからないftp://http://、URIにありません。あなたは今私の投票を獲得します;-)
Abel

回答:


126

Uriに別のコンストラクタを使用すると役立つ場合があります。

サーバー名がある場合

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

追加する相対Uriパスがあります。例:

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

これら2つから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
@サイモン、私は再びあなたに賛成票を投じました、大きな遅れについて申し訳ありません!あなたは私を2回パンチすることができます笑

13

それは現実的なURIのように聞こえます。クロスブラウザーの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.