System.UriFormatException:无效的URI:无法解析主机名

时间:2010-05-11 22:44:32

标签: .net webexception

突然间,我的网站上出现以下错误。它不访问数据库。它只是一个使用.NET 2.0的简单网站。

我最近应用了可用的Windows Server 2003 Service Pack。这会改变一切吗?

我应该补充一点,这个错误是随机出现的,并且已经在今天和昨天这样做了。我离开它5分钟,错误就消失了。

  '/'应用程序中的服务器错误。      

无效的URI:无法解析主机名。描述:一个   在执行当前Web期间发生了未处理的异常   请求。请查看堆栈跟踪以获取有关的更多信息   错误以及它在代码中的起源。

异常详细信息:

  

System.UriFormatException:无效的URI:主机名不能   解析。

来源错误:

  

执行期间生成了未处理的异常   当前的网络请求。有关的来源和位置的信息   可以使用下面的异常堆栈跟踪来识别异常。

堆栈追踪:

  

[UriFormatException:无效的URI:无法解析主机名。]
  System.Uri.CreateThis(String uri,Boolean dontEscape,UriKind uriKind)   +5367536 System.Uri.CreateUri(Uri baseUri,String relativeUri,Boolean dontEscape)+31 System.Uri..ctor(Uri baseUri,String   relativeUri)+34 System.Net.HttpWebRequest.CheckResubmit(Exception&   e)+5300867

     

[WebException:无法处理从HTTP / HTTPS协议重定向到   其他不同的。] System.Net.HttpWebRequest.GetResponse()   +5314029 System.Xml.XmlDownloadManager.GetNonFileStream(Uri uri,ICredentials credentials)+69
  System.Xml.XmlDownloadManager.GetStream(Uri uri,ICredentials   凭证)+3929371 System.Xml.XmlUrlResolver.GetEntity(Uri)   absoluteUri,String role,Type ofObjectToReturn)+54
  System.Xml.XmlTextReaderImpl.OpenUrlDelegate(Object xmlResolver)+74
  System.Threading.CompressedStack.runTryCode(Object userData)+70
  System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup(TryCode   code,CleanupCode backoutCode,Object userData)+0
  System.Threading.CompressedStack.Run(CompressedStack compressedStack,   ContextCallback回调,对象状态)+108
  System.Xml.XmlTextReaderImpl.OpenUrl()+ 186   System.Xml.XmlTextReaderImpl.Read()+208
  System.Xml.XmlLoader.Load(XmlDocument doc,XmlReader reader,Boolean   preserveWhitespace)+112 System.Xml.XmlDocument.Load(XmlReader   读者)+108
  System.Web.UI.WebControls.XmlDataSource.PopulateXmlDocument(XmlDocument的   document,CacheDependency& dataCacheDependency,CacheDependency&   transformCacheDependency)+303
  System.Web.UI.WebControls.XmlDataSource.GetXmlDocument()+153
  System.Web.UI.WebControls.XmlDataSourceView.ExecuteSelect(DataSourceSelectArguments   参数)+29 System.Web.UI.WebControls.BaseDataList.GetData()+39   System.Web.UI.WebControls.DataList.CreateControlHierarchy(布尔   useDataSource)+264
  System.Web.UI.WebControls.BaseDataList.OnDataBinding(EventArgs e)+55   System.Web.UI.WebControls.BaseDataList.DataBind()+75
  System.Web.UI.WebControls.BaseDataList.EnsureDataBound()+55
  System.Web.UI.WebControls.BaseDataList.CreateChildControls()+65
  System.Web.UI.Control.EnsureChildControls()+97
  System.Web.UI.Control.PreRenderRecursiveInternal()+53
  System.Web.UI.Control.PreRenderRecursiveInternal()+202
  System.Web.UI.Control.PreRenderRecursiveInternal()+202
  System.Web.UI.Control.PreRenderRecursiveInternal()+202
  System.Web.UI.Control.PreRenderRecursiveInternal()+202
  System.Web.UI.Page.ProcessRequestMain(布尔   includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)   4588

1 个答案:

答案 0 :(得分:5)

Uri.Create和Uri.TryCreate中存在一些错误,允许它们创建无法随后解析的无效URI。我不时遇到这种情况,但一直无法追踪导致它的url字符串。我发布了一些关于here的信息。

如果你有一个网址列表,并且知道其中一个会导致问题(我没有那么奢侈,因为我在网页抓取中遇到过这个问题,我没有保存页面文本),你可以找到这个伪代码的错误:

while not end of file
{
    string url = read from file
    Uri uri = new Uri(url);
    try
    {
        string host = uri.Host;
    }
    catch (UriFormatException)
    {
        Console.WriteLine("Bad url: {0}", url);
    }
}

如果您可以识别导致此异常的一些网址,我肯定希望看到它们。