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 错误的主要内容,如果未能解决你的问题,请参考以下文章

单声道下的 WebRequest 不支持 HTTP 协议

Bootstrap中glyphicons-halflings-regular.woff字体报404错notfound

org.springframework.web.client.HttpClientErrorException$NotFound: 404 null

报错处理

django http404 详解

WebRequest.DefaultWebProxy 和 WebRequest.GetSystemWebProxy() 有啥区别?