WebRequest 异常 NotFound 错误

6
我有两个不同的ASP.NET Core网站:管理和公共网站。这两个网站都在暂存服务器和本地机器上运行。我向不同的页面发送GET请求,以确定不同页面的执行时间,并遇到了管理网站的问题:本地实例和暂存服务器上的所有URL始终返回404错误:
“System.dll”中发生了未处理的“System.Net.WebException”类型的异常
附加信息:远程服务器返回错误:(404)未找到。
同时,在浏览器中进行相同的请求可以正常返回HTML页面。通过HttpWebRequest对公共网站的请求始终返回200状态代码(OK)。我使用此处的请求代码。我尝试添加所有头文件和来自浏览器请求的cookie,但没有帮助。还尝试调试本地实例并发现在执行请求时没有抛出任何异常。你有什么想法吗?

2
404意味着服务器中请求的某个内容不存在,比如默认网站(index.html)...尝试使用简单的WebClient w = new WebClient(); string s = w.DownloadString("http://myserver.com"); - user6522773
4
只是出于好奇,你在自己的问题上放了一个相当高的悬赏,并标注了一句话:“其中一个或多个答案是值得额外奖励的典范。” 现在只有一个答案,所以它应该是“典范”,但你没有接受或甚至没有点赞它。这很奇怪。 - Ivan Stoev
2
使用 Fiddler 捕获工作和失败尝试的通信。完成后,通常可以确定需要更改的内容。 - Brian from state farm
@Evgeny Levin 虽然这不是一个好的做法,但可以配置Web应用程序在身份验证或授权失败时返回404错误。在您提供的链接中没有进行身份验证。也许问题在于身份验证失败,但服务器返回了错误的响应。 - Omid
我的意见 - 浏览器可以通过代理发送请求;如果是这样,请确保您的制作的请求也通过同一代理。 - Ondrej Svejdar
显示剩余4条评论
1个回答

6

404错误信息过于泛化。你链接提供的代码(https://dev59.com/ZGQn5IYBdhLWcg3wr406#16642279)没有错误处理 - 这是一个很好的例子,告诉我们盲目从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代理,而您的服务器客户端则没有使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接