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 编译的。
我收到以点结尾的页面异常错误,例如:
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 编译的。