我正在研究用 C++ 为 RESTful Web 服务开发一个 COM 包装器库,并且想知道是否有任何标准方法可以将 HTTP 状态代码值映射到将通过 COM API 返回的 HRESULT。我已经浏览了 WinError.h 中的定义,但没有看到任何合适的内容。我知道您可以定义自己的 HRESULT 值范围,但(与往常一样)如果存在标准方法,我更愿意采用标准方法。
感谢您提前提供任何帮助。
我正在研究用 C++ 为 RESTful Web 服务开发一个 COM 包装器库,并且想知道是否有任何标准方法可以将 HTTP 状态代码值映射到将通过 COM API 返回的 HRESULT。我已经浏览了 WinError.h 中的定义,但没有看到任何合适的内容。我知道您可以定义自己的 HRESULT 值范围,但(与往常一样)如果存在标准方法,我更愿意采用标准方法。
感谢您提前提供任何帮助。
一种方法是使用Microsoft SDK 中的BitsMsg.h获取一组 HTTP 状态代码
例如 404 定义为:
#define BG_E_HTTP_ERROR_404 0x80190194L
// ^^ The requested URL does not exist on the server.
要在线查看这些代码,请使用以下链接:HRESULTS:FACILITY_HTTP或BitsMsg.h
Windows SDK 8.0HRESULT
中几乎所有的 HTTP 状态码都引入了 s winerror.h
,例如:
#define HTTP_E_STATUS_NOT_FOUND _HRESULT_TYPEDEF_(0x80190194L)
如果您检查了 的所有值HTTP_E_*
,您可能会发现错误代码部分HRESULT
只是 HTTP 状态代码。然后,您可以定义一个宏来将任何 http 状态代码转换为 HRESULT:
#define HRESULT_FROM_HTTP(code) MAKE_HRESULT(SEVERITY_ERROR, FACILITY_HTTP, code)