当前位置: 首页 > 知识库问答 >
问题:

为什么HttpWebRequest抛出异常而不是返回HttpStatusCode.NotFound?

公良奇
2023-03-14

我正在尝试使用HttpWebRequest验证Url的存在。我发现了一些基本上这样做的示例:

HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url);
request.Method = "HEAD";
using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
{
    return response.StatusCode;
}

但是,如果url确实损坏了,它不会返回响应,而是抛出异常。

我将代码修改为:

try
{
    HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url);
    request.Method = "HEAD";
    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
    {
        return response.StatusCode;
    }
}
catch (System.Net.WebException ex)
{
    var response = ex.Response as HttpWebResponse;
    return response == null ? HttpStatusCode.InternalServerError : response.StatusCode;
}

这似乎终于做到了我想要的。

但是我想知道,为什么请求会抛出异常,而不是返回带有NotFindstatus代码的响应?

共有2个答案

贺文彬
2023-03-14

为什么不呢?它们都是有效的设计选项,而HttpWebRequest就是以这种方式设计的。

苏君昊
2023-03-14

当网页大量使用状态码,而且并不都是错误的时候,这就很烦人了。这会让处理尸体变得很痛苦。我个人使用这种扩展方法来获得响应。

public static class HttpWebResponseExt
{
    public static HttpWebResponse GetResponseNoException(this HttpWebRequest req)
    {
        try
        {
            return (HttpWebResponse)req.GetResponse();
        }
        catch (WebException we)
        {
            var resp = we.Response as HttpWebResponse;
            if (resp == null)
                throw;
            return resp;
        }
    }
}
 类似资料:
  • 下面是我的代码。当我运行它时,我在线程“main”java.lang.IndexOutOfBoundsException:Index:3、Size:2中得到异常,而不是我的异常消息。谁能解释一下我做错了什么,为什么会这样?谢谢!

  • 问题内容: 考虑以下代码: 无需添加方法签名即可编译该代码。(它与同样表现到位,太)。 我理解为什么 可以 安全地运行它,因为实际上不能将其引发在块中,因此不能引发已检查的异常。我有兴趣知道在何处指定此行为。 并非永远都不会达到目标:以下代码也会编译: 但是,如果抛出一个检查的异常,它不会像我期望的那样编译: 在JLS Sec 11.2.2中 ,它说: 一,其抛出的表达式语句(§14.18)具有静

  • 针对每个循环处理跳过迭代的控件的问题,我发现允许在不断变化的集合上进行迭代: 例如,以下内容: 投掷 InvalidOperationException:集合已修改;枚举操作可能无法执行。 然而,在a。Net窗体,您可以执行以下操作: 它跳过元素,因为迭代器运行在更改的集合上,而不会引发异常 错误?如果基础集合发生变化,迭代器是否需要抛出? 所以我的问题是为什么对不断变化的的迭代不会抛出Inval

  • 我试图更好地理解C#的编译器。它坚持所有代码路径必须返回一个值,我认为这是相当公平的。 这将不会编译:

  • 问题内容: 这是另一个有争议的主题,但是这次我只在寻找简单且记录在案的答案。场景: 让我们假设以下方法: 问题: 1.您如何建议改进这种归还某些属性的狗的技术? 2. rs.next()对于空的ResultSet将返回false,或者将生成异常,例如: 字符串str = null; System.out.println(str.toString()); 3.如果在从ResultSet的当前行初始化

  • 问题内容: 使用Spring Security 4.0.2.RELEASE 对于使用spring-security框架的基本用户身份验证,我实现了spring-security 当用户尝试使用正确的用户名登录时, 错误的 密码和用户的 帐户已经被锁定 ,那么我希望spring- security身份验证模块会抛出异常,但是会抛出异常 我的问题是 为什么spring-security正在处理用户进行