WebRequest奇怪的NotFound错误

Evg*_*vin 5 c# webrequest httpwebrequest http-status-code-404 asp.net-core

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

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

System.dll中出现未处理的"System.Net.WebException"类型异常

附加信息:远程服务器返回错误:(404)Not Found.

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

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

有任何想法吗?

Ond*_*dar 5

404是通用的方式。在您的链接 ( /sf/answers/1164959561/ ) 中提供的代码没有错误处理 - 这是一个很好的例子,说明当您盲目地从 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();
  }
}
Run Code Online (Sandbox Code Playgroud)

因此,当出现异常时,您不仅会获得状态代码,还会在errorData变量中获得来自服务器的完整响应。

要检查的一件事是代理 - 浏览器可以使用 http 代理,而您的服务器客户端不使用。