WebRequest 奇怪的 NotFound 错误
Posted
技术标签:
【中文标题】WebRequest 奇怪的 NotFound 错误【英文标题】:WebRequest Strange NotFound Error 【发布时间】:2016-12-16 19:20:24 【问题描述】:我有 2 个不同的 ASP.NET Core 网站:admin 和 public。 在登台服务器和本地机器上都运行。
我向不同页面发送 GET 请求以确定不同页面的执行时间,并遇到管理站点问题:本地实例和暂存上的所有 url 总是返回 404 错误:
“System.Net.WebException”类型的未处理异常发生在 系统.dll
附加信息:远程服务器返回错误:(404) Not 找到了。
同时,浏览器中的相同请求正常返回html页面。通过HttpWebRequest
到公共站点的请求也总是返回 200 状态码(OK)。
我收到的请求代码here。
我尝试从浏览器请求中添加所有标头和 cookie,但没有帮助。也尝试调试本地实例,发现请求执行时没有抛出异常。
有什么想法吗?
【问题讨论】:
404 表示服务器中请求的内容不存在,例如默认网站(index.html)...尝试使用简单的WebClient w = new WebClient(); string s = w.DownloadString("http://myserver.com");
只是出于好奇,您对自己的问题提出了丰厚的奖励,其中一个或多个答案堪称典范,值得额外奖励。。只有一个答案,所以它应该是exemplary
,但你没有接受甚至不赞成它。奇怪。
使用 fiddler 捕获工作和失败尝试的通信。完成此操作后,您通常可以知道需要更改的内容。
@Evgeny Levin 虽然这不是一个好习惯,但可以将 Web 应用程序配置为在身份验证或授权失败时返回 404 错误。在您提供的链接中,未完成任何身份验证。也许问题是身份验证失败但服务器返回错误的响应。
我的 5 美分 - 浏览器可以通过代理发送请求;如果是这样,请确保您制作的请求通过相同的代理。
【参考方案1】:
404 是通用的方式。您的链接 (https://***.com/a/16642279/571203) 中的答案中提供的代码没有错误处理 - 这是一个很好的例子,说明当您盲目地从 *** 复制代码时会遇到麻烦 :)
带有错误处理的修改后的代码应如下所示:
string urlAddress = "http://google.com/rrr";
var request = (HttpWebRequest)WebRequest.Create(urlAddress);
string data = null;
string errorData = null;
try
using (var response = (HttpWebResponse)request.GetResponse())
data = ReadResponse(response);
catch (WebException exception)
using (var response = (HttpWebResponse)exception.Response)
errorData = ReadResponse(response);
static string ReadResponse(HttpWebResponse response)
if (response.CharacterSet == null)
using (var reader = new StreamReader(response.GetResponseStream()))
return reader.ReadToEnd();
using (var reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding(response.CharacterSet)))
return reader.ReadToEnd();
因此,当出现异常时,您不仅会获得状态代码,还会在 errorData
变量中获得来自服务器的完整响应。
要检查的一件事是代理 - 浏览器可以使用 http 代理,而您的服务器客户端不使用。
【讨论】:
以上是关于WebRequest 奇怪的 NotFound 错误的主要内容,如果未能解决你的问题,请参考以下文章
Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound
org.springframework.web.client.HttpClientErrorException$NotFound: 404 null
WebRequest.DefaultWebProxy 和 WebRequest.GetSystemWebProxy() 有啥区别?