WebRequest奇怪的NotFound错误

时间:2016-08-10 12:00:10

标签: c# asp.net-core httpwebrequest http-status-code-404 webrequest

我有两个不同的ASP.NET核心网站:admin和public。 两者都在登台服务器和本地计算机上运行。

我将GET请求发送到不同的页面以确定不同页面的执行时间并遇到管理站点的问题:本地实例上的所有URL和登台总是返回404错误:

  

未处理的类型' System.Net.WebException'发生在   System.dll中

     

其他信息:远程服务器返回错误:(404)不是   找到。

同时,浏览器中的相同请求通常会返回html页面。通过HttpWebRequest到公共站点的请求也始终返回200状态代码(OK)。 请求代码here

我尝试从浏览器请求添加所有标头和Cookie,但它没有帮助。还尝试调试本地实例,发现请求执行时没有抛出异常。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

WebException是一种通用的方法,可以告诉您连接出现问题而不必告诉您它是什么。

要真正了解问题出现的原因,您需要阅读catch块内的响应 - 服务器将为您提供更多详细信息。

如果您不使用alreday,请使用Try Catch Block。

答案 1 :(得分:3)

404是通用的方式。链接中提供的代码(https://stackoverflow.com/a/16642279/571203)没有错误处理 - 这是当您从stackoverflow盲目复制代码时如何解决问题的绝佳示例:)

带有错误处理的修改代码应如下所示:

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代理,而服务器客户端则不使用。