link 末尾存在点时未找到 WebClient 响应 404

WebClient Respond 404 not found when dot exist on end of link

我收到以点结尾的页面异常错误,例如:

http://www.carsireland.ie/car-dealers/county/donegal/prestige-cars-ireland-ltd.

当我在 Chrome 浏览器中打开它时一切正常,但是当我尝试这样做时:

WebClient client = new WebClient();
            html = client.DownloadString("http://www.carsireland.ie/car-dealers/county/donegal/prestige-cars-ireland-ltd.");

我得到:

An unhandled exception of type 'System.Net.WebException' occurred in System.dll

Additional information: The remote server returned an error: (404) Not Found.

有趣的是,这只发生在 .NET Framework 4 上。

我有很多类似的链接,我该如何解决?

更新: 我发现这实际上是 .NET 4.5 之前的已知错误,其中 Uri class 正在处理 urls与桌面上的路径相同。在桌面上,尾随句点无关紧要,所以它被删除了。 这是另一个 Stack Overflow 问题的答案: link to answer with code example

首先尝试将字符串包装在 Uri 对象中,就像我在下面所做的那样。下面的代码对我来说工作得很好。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Net;

namespace DownloadString
{
    class Program
    {
        static void Main(string[] args)
        {
            WebClient client = new WebClient();
            Uri uri = new Uri("http://www.carsireland.ie/car-dealers/county/donegal/prestige-cars-ireland-ltd.");
            string str = client.DownloadString(uri);
            Console.WriteLine(str);
            Console.ReadKey();
        }
    }
}

告诉我它是如何工作的!

Here is a fiddle 相同的代码以表明它有效

正如您在评论中提到的,这在 .NET 4.0 中不起作用。我也在3.5测试过,还是不行。

经过进一步调查,我发现低于 .NET 4.5 的任何内容都会在发出请求之前去掉 url 末尾的句点。这是一张显示 Fiddler 中的两个 http 请求的图像。它们都是使用相同的代码制作的,但第一个是使用 .NET 4.0 编译的,第二个是使用 .NET 4.5 编译的。