c# - 无效的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格式? 这是纯文本。

abatishchev asked 2019-08-13T11:48:12Z
5个解决方案
98 votes

为Uri使用不同的构造函数可能会有所帮助。

如果您有服务器名称

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

并有一个相对的Uri路径附加到它,例如

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

当从这两个创建Uri时,我得到的#34;格式无法确定" 异常,除非我使用带有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);
CJBrew answered 2019-08-13T11:48:51Z
53 votes

检查可能的原因:[http://msdn.microsoft.com/en-us/library/z6c2z492(v=VS.100).aspx]

编辑:

您需要将协议前缀放在地址前面,即在您的情况下" [ftp://"]

Simon answered 2019-08-13T11:49:26Z
12 votes

听起来它可能是一个相对的uri。 我在进行跨浏览器Silverlight时遇到了这个问题。 在我的博客上,我提到了一种解决方法:传递"上下文#34; uri作为第一个参数。

如果uri是相对的,则使用上下文uri来创建完整的uri。 如果uri是绝对的,则忽略上下文uri。

编辑:你需要一个"计划" 在uri,例如" [ftp://"]或" [http://"]

Stephen Cleary answered 2019-08-13T11:50:05Z
10 votes

更好地使用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);
        }
 }
Ashish Gupta answered 2019-08-13T11:50:32Z
6 votes

我通过使用UriBuilder来解决这个问题。

UriBuilder builder = new UriBuilder(slct.Text);

if (DeleteFileOnServer(builder.Uri))
{
   ...
}
answered 2019-08-13T11:50:58Z
translate from https://stackoverflow.com:/questions/2887924/invalid-uri-the-format-of-the-uri-could-not-be-determined