From 863e9871e5493717d0af04ed6915154c2a3b0ccf Mon Sep 17 00:00:00 2001 From: Ahson Khan Date: Thu, 1 Jul 2021 15:56:20 -0700 Subject: [PATCH] Make sure RFE Message is only set to the response body payload. (#2539) * Make sure RFE Message is only set to the response body payload. * Add a note about the Message property. * Jeff likes wordsmithing things for fun. --- sdk/core/azure-core/inc/azure/core/exception.hpp | 8 ++++---- sdk/core/azure-core/src/exception.cpp | 14 +++++++++----- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/sdk/core/azure-core/inc/azure/core/exception.hpp b/sdk/core/azure-core/inc/azure/core/exception.hpp index d62d591fb..f6fc4b6a6 100644 --- a/sdk/core/azure-core/inc/azure/core/exception.hpp +++ b/sdk/core/azure-core/inc/azure/core/exception.hpp @@ -55,6 +55,9 @@ namespace Azure { namespace Core { /** * @brief The error message from the service returned in the HTTP response. * + * @note This string is purely for informational or diagnostic purposes, and should't be relied + * on at runtime. + * */ std::string Message; @@ -72,10 +75,7 @@ namespace Azure { namespace Core { * * @param message The error description. */ - explicit RequestFailedException(std::string const& message) - : std::runtime_error(message), Message(message) - { - } + explicit RequestFailedException(std::string const& message) : std::runtime_error(message) {} /** * @brief Constructs a new `%RequestFailedException` object with an HTTP raw response. diff --git a/sdk/core/azure-core/src/exception.cpp b/sdk/core/azure-core/src/exception.cpp index c913cd959..c18f11849 100644 --- a/sdk/core/azure-core/src/exception.cpp +++ b/sdk/core/azure-core/src/exception.cpp @@ -32,17 +32,21 @@ namespace Azure { namespace Core { RequestFailedException::RequestFailedException( std::unique_ptr& rawResponse) - : std::runtime_error(GetRawResponseField(rawResponse, "message")) + : std::runtime_error("Received an HTTP unsuccesful status code.") { auto& headers = rawResponse->GetHeaders(); + // These are guaranteed to always be present in the rawResponse. StatusCode = rawResponse->GetStatusCode(); - ErrorCode = GetRawResponseField(rawResponse, "code"); ReasonPhrase = rawResponse->GetReasonPhrase(); - RequestId = HttpShared::GetHeaderOrEmptyString(headers, HttpShared::MsRequestId); - ClientRequestId = HttpShared::GetHeaderOrEmptyString(headers, HttpShared::MsClientRequestId); - Message = this->what(); RawResponse = std::move(rawResponse); + + // The response body may or may not have these fields + ErrorCode = GetRawResponseField(RawResponse, "code"); + Message = GetRawResponseField(RawResponse, "message"); + + ClientRequestId = HttpShared::GetHeaderOrEmptyString(headers, HttpShared::MsClientRequestId); + RequestId = HttpShared::GetHeaderOrEmptyString(headers, HttpShared::MsRequestId); } std::string RequestFailedException::GetRawResponseField(