Ayende在Raccoon Blog源代码中引用的.NET中的Uri错是什么?

Gor*_*vic 5 .net asp.net uri

在查看Ayende's Racoon Blog的来源时,我看到了global.asax.cs:

// Work around nasty .NET framework bug
try
{
    new Uri("http://fail/first/time?only=%2bplus");
}
catch (Exception)
{
}
Run Code Online (Sandbox Code Playgroud)

这似乎是第一个请求中发生的错误的解决方法.有谁知道这是什么错误或如何重现它?

Aak*_*shM 2

通过谷歌搜索可以找到2010 年 3 月发表的这篇 Ayende 博客文章,我引用了其中的摘录:

我现在可以重现这个,这里是它是如何到达那里的:

public class Strange : MarshalByRefObject
{
    public void WTF()
    {
        Console.WriteLine(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);
        new Uri("http://localhost:58080/indexes/categoriesByName?query=CategoryName%3ABeverages&start=0&pageSize=25");
    }
}

public class Program
{
    private static void Main()
    {
        var instanceAndUnwrap = (Strange) AppDomain.CreateDomain("test", null, new AppDomainSetup
        {
            ConfigurationFile = ""
        }).CreateInstanceAndUnwrap("ConsoleApplication5", "ConsoleApplication5.Strange");
        instanceAndUnwrap.WTF();
    }
}
Run Code Online (Sandbox Code Playgroud)

这花了一些时间才弄清楚。

从下面的评论线程(我已浏览但未详细阅读)来看,根本原因似乎是机器根配置文件中的错误,每个 ? 仅解析一次。AppDomain,因此第二次及以后没有错误。

习惯性地使用这个被烧过一次的构造,是程序员通过艰苦的经验积累起来的习惯。经验不足的人可能会嘲笑“货物崇拜”或“巧合编程”,而经验丰富的人只会微笑点头。