web-dev-qa-db-ja.com

無効なURI:URIの形式を特定できませんでした

このエラーが引き続き発生します。

無効な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形式ではないのはなぜですか?それはプレーンテキストです。

93
anon271334

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);
101
CJBrew

ここで考えられる理由を確認してください: http://msdn.Microsoft.com/en-us/library/z6c2z492(v = VS.100).aspx

編集:

アドレスの前にプロトコルプレフィックスを付ける必要があります。つまり、「ftp://」の場合

53
Simon

現実的なuriのように聞こえます。クロスブラウザーのSilverlightを実行しているときにこの問題に遭遇しました。 blog で回避策について言及しました:最初のパラメーターとして「コンテキスト」uriを渡します。

Uriが現実的な場合、コンテキストuriを使用して完全なuriを作成します。 uriが絶対の場合、コンテキストuriは無視されます。

EDIT:URIに「スキーム」、たとえば「ftp://」または「http://」が必要です

12
Stephen Cleary

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);
        }
 }
11
Ashish Gupta

代わりに riBuilder を使用してこれを回避しました。

UriBuilder builder = new UriBuilder(slct.Text);

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