检查 HttpWebResponse 是否为空

2023-12-23

我正在向 REST 服务发出 HTTP post 请求,当我收到 HttpWebResponse 返回时,我正在执行以下检查。当我执行 webresponse != null 时,我是否还应该检查 responseStream != null

HttpWebResponse webResponse = webRequest.GetResponse() as HttpWebResponse;
if (webResponse != null)
{
    var responseStream = webResponse.GetResponseStream();
    int responseCode = (int)webResponse.StatusCode;
    if (responseStream != null && responseCode == (int)HttpStatusCode.Created)
    {
        cmsStoreWebResponse = ((new  StreamReader(responseStream)).ReadToEnd());`
    }
    else
    {
        this.LogError(string.Format("{0}\n Endpoint: {1}\n {2} {3} {4}", ErrorCodes.IWS_CMSRetrieve_ERROR_001, oagEndpointUrl, ErrorCodes.IWS_CMSStore_ERROR_SERVICE_DOWN, responseStream, responseCode));
        serviceData.Fatal = true;
        serviceData.ErrorCode = ErrorCodes.IWS_EFORMSFORMSETS_001;
        serviceData.ErrorDetails = string.Format("\nEndpoint: {0}\n {1}", oagEndpointUrl, ErrorCodes.RESPONSE_STREAM_NULL);
        throw new FaultException<ServiceExceptionData>(serviceData, new FaultReason(string.Format("\nEndpoint: {0}\n {1}", oagEndpointUrl, ErrorCodes.RESPONSE_STREAM_NULL)));
    }
}
else
{
    this.LogError(string.Format("{0}\n Endpoint: {1}\n {2}",  ErrorCodes.IWS_CMSRetrieve_ERROR_001, oagEndpointUrl, ErrorCodes.IWS_CMSStore_ERROR_SERVICE_DOWN));
    serviceData.Fatal = true;
    serviceData.ErrorCode = ErrorCodes.IWS_EFORMSFORMSETS_001;
    serviceData.ErrorDetails = string.Format("\nEndpoint: {0}\n {1}", oagEndpointUrl, ErrorCodes.RESPONSE_STREAM_NULL);
    throw new FaultException<ServiceExceptionData>(serviceData, new FaultReason(string.Format("\nEndpoint: {0}\n {1}", oagEndpointUrl, ErrorCodes.RESPONSE_STREAM_NULL)));
}

没有派生自的内置类型WebResponse, 尤其HttpWebResponse,可以返回 null。这种迷信的信念误导了许多开发人员。不要检查 null。这样的代码就是死代码。

与返回空流相比,null 意味着什么?!这根本不符合逻辑。

Also, GetResponse()不能返回 null。再说一遍,这是什么意思? HTTP 协议不支持“空响应”的概念。如果由于库错误而发生这种情况,无论如何都无法处理这种情况。任何此类检查都没有帮助。

可以创建派生类WebResponse返回疯狂的值,例如null。没有内置类可以做到这一点,并且应该将其视为返回的错误null。派生类WebResponse非常罕见。我从来没有见过一个。

这是一个很好的代码模式:

var request = WebRequest.Create("http://example.org/");

using (var response = request.GetResponse())
using (var responseStream = response.GetResponseStream())
using (var responseReader = new StreamReader(responseStream))
{
    var contents = responseReader.ReadToEnd();
}

它演示了如何使用简洁、安全地读取 HTTP URL 的内容HttpWebRequest.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

检查 HttpWebResponse 是否为空 的相关文章

随机推荐

  • Laravel 5:自定义 abort() 消息

    使用 Laravel 5 我想发送自定义abort 信息 例如 如果用户没有执行某项操作所需的权限 我想abort 401 User can t perform this actions 目前 当我这样做时 响应文本是 HTML 页面 而不
  • 使用 Javascript 验证单选按钮

    我已经梳理了这里的大量页面 但仍然无法让我的显式验证器工作 基本上 当单击提交按钮时 我希望脚本验证无线电是否已检查 如果检查后什么也不做 如果没有检查 我希望它发布一条警报消息 我的 html 大致如下所示
  • SignalR + Win RT(Windows 8.1) + 使用未签名的证书不起作用[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 经过 4 个多小时的搜索 使 Windows RT SignalR 使用自签名证书工作 找到了 所以我在这里分享一个解决方案 您收到错误 底
  • 如何发送 SOAP 请求?

    我是 SOAP 和 xml 的新手 我读了很多教程 但似乎没有什么是足够清楚的 我有点困惑 到底如何发送 SOAP 请求 我尝试执行此操作的方法是将 SOAP 请求 如下所示 保存为 test Request xml POST Mobile
  • 如何在node.js中逐块进行压缩?

    我正在以块的形式获取压缩网页的内容 并希望在收到每个内容后立即对其进行解压缩 因此我正在尝试执行以下操作 为了可读性而将内容剥离 var decompress function string callback zlib gunzip str
  • 使用宏刷新 Excel 工作簿中的所有数据透视表

    我有一本包含 20 个不同数据透视表的工作簿 有没有简单的方法可以找到所有数据透视表并在 VBA 中刷新它们 Yes ThisWorkbook RefreshAll 或者 如果您的 Excel 版本足够旧 Dim Sheet as Work
  • 使用 OAuth 从 Twitter 获取名字/姓氏/电子邮件

    我专门使用omniauth 来允许通过facebook google twitter 登录我的网站 我存储名字 姓氏和电子邮件 但是 当我从 oauth 提出 twitter auth 哈希时 我只能在 auth 哈希中获得昵称 名称 位置
  • iPhone Web 应用程序的日期选择器

    显示基于 iPhone 的 Web 应用程序的日期选择器的最佳方式是什么 我们可以在 Web 应用程序中显示类似 iPhone 本机日期选择器的内容吗 最简单的方法 可以说是最好的方法 是使用 safari 的内置日期选择器作为输入框 使用
  • 使用 Google Apps 脚本更新 Google 文档中的嵌入图表

    太长了 如何使用文档中的脚本编辑器更新文档中嵌入的表格图表 我知道有一个脚本可以为 Google 幻灯片执行此操作 但我正在尝试在 Google 文档中执行此操作 但找不到任何相关文档 https developers google com
  • 尝试连接到 localhost:5000 Firebase 时出现“无法获取/”

    我正在尝试让 Firebase 上的本地主机服务器正常工作 但我继续在浏览器中收到以下消息 无法获取 我看了一下控制台 它只说 http 本地主机 5000 http localhost 5000 404 未找到 我尝试使用 firebas
  • 外部 swf 卸载后声音继续播放

    我有一个 Flash 应用程序 某种加载外部 SWF 视频播放器的播放列表 我没有对该外部文件的代码访问权限 因此用户可以观看视频或跳到另一个视频 当用户切换到另一个视频时 将加载新的 SWF 文件 问题 如果用户没有看完视频并跳到下一个
  • onClick 里面有两个参数

    我试图在 ReactJs 中的 onClick 上传递两个事件操作 基本上我想要类似的东西 div prop2 value2 this continue project gt 我尝试了 1000 种不同的语法编写方式 div prop2 v
  • 如何将 Python 3 和 Django 与 Apache 结合使用?

    我的目标是使用 Apache 设置 Python 3 我最大的问题实际上是获取 mod python so 在我的一生中 我只找到一个可以下载它的网站 http www modpython org 而我得到的是一堆构建和安装文件 我找不到解
  • Django:在 queryset.update 上发出信号

    如果您使用的是 Django 会发送 pre post delete 信号queryset delete 方法 但不应该也发送 pre post save onqueryset update 也许应该如此 但事实并非如此 update 不调
  • 您在 Netbeans 中创建了哪些有用的宏? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Typescript i18next 不满足约束 'string |模板字符串数组 NextJS

    我正在尝试输入要使用 i18next 进行翻译的对象数组 但变量 navItems 中出现以下消息 我在其中声明 i18next 然后迭代该数组Type NavItemProps does not satisfy the constrain
  • 版权信息的正确语义标签 - html5

    在网站页脚中包含版权声明的最佳且最语义化的标签 方法是什么 将其放入您的
  • 让“$watch”功能远离控制器的最佳实践

    我试图找到一些搬家最佳实践的好例子 watch例如 从控制器到工厂的功能 我发现实际上对于什么是最好的做法并没有一致的意见 我见过注入的例子 rootScope进入工厂并 watch那里的价值变化 另一个建议是尽可能避免它们 并使用ngCh
  • 使用 struct.pack 和 struct.unpack_from 写入数据结构无法正确读取

    我在获取二进制文件中的数据时遇到这个问题 Write data f open path wb start date 2014 1 1 0 0 0 0 end date 2014 2 1 0 0 0 0 for x in range 10 f
  • 检查 HttpWebResponse 是否为空

    我正在向 REST 服务发出 HTTP post 请求 当我收到 HttpWebResponse 返回时 我正在执行以下检查 当我执行 webresponse null 时 我是否还应该检查 responseStream null Http