我正在考虑用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.0为winerror.h
中几乎所有的HTTP状态代码引入了HRESULT
,例如:
#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)