/// <summary> /// Gets the value of the x-ms-date or Date header. /// </summary> /// <param name="request">The request where the value is read from.</param> /// <returns>The value of the x-ms-date or Date header.</returns> public static string GetPreferredDateHeaderValue(HttpRequestMessage request) { string microsoftDateHeaderValue = HttpResponseMessageUtils.GetHeaderSingleValueOrDefault(request.Headers, Constants.HeaderConstants.Date); if (!string.IsNullOrEmpty(microsoftDateHeaderValue)) { return(microsoftDateHeaderValue); } return(AuthenticationUtility.GetCanonicalizedHeaderValue(request.Headers.Date)); }
internal async static Task <StorageException> PopulateStorageExceptionFromHttpResponseMessage(HttpResponseMessage response, RequestResult currentResult, Func <Stream, HttpResponseMessage, string, StorageExtendedErrorInformation> parseError) { if (!response.IsSuccessStatusCode) { try { currentResult.HttpStatusMessage = response.ReasonPhrase; currentResult.HttpStatusCode = (int)response.StatusCode; currentResult.ServiceRequestID = HttpResponseMessageUtils.GetHeaderSingleValueOrDefault(response.Headers, Constants.HeaderConstants.RequestIdHeader); string tempDate = HttpResponseMessageUtils.GetHeaderSingleValueOrDefault(response.Headers, Constants.HeaderConstants.Date); currentResult.RequestDate = string.IsNullOrEmpty(tempDate) ? DateTime.Now.ToString("R", CultureInfo.InvariantCulture) : tempDate; if (response.Headers.ETag != null) { currentResult.Etag = response.Headers.ETag.ToString(); } if (response.Content != null && response.Content.Headers.ContentMD5 != null) { currentResult.ContentMd5 = Convert.ToBase64String(response.Content.Headers.ContentMD5); } } catch (Exception) { // no op } try { Stream errStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false); if (parseError != null) { currentResult.ExtendedErrorInformation = parseError(errStream, response, response.Content.Headers.ContentType.ToString()); } else { currentResult.ExtendedErrorInformation = await StorageExtendedErrorInformation.ReadFromStreamAsync(errStream.AsInputStream()); } } catch (Exception) { // no op } return(new StorageException(currentResult, response.ReasonPhrase, null)); } else { return(null); } }
/// <summary> /// Appends the value of the Date header (or, optionally, the x-ms-date header) to the specified canonicalized string. /// </summary> /// <param name="canonicalizedString">The canonicalized string where the value is appended.</param> /// <param name="request">The request where the value is read from.</param> /// <param name="allowMicrosoftDateHeader">true if the value of the x-ms-date header can be used and is preferred; otherwise, false.</param> public static void AppendCanonicalizedDateHeader(CanonicalizedString canonicalizedString, HttpRequestMessage request, bool allowMicrosoftDateHeader = false) { string microsoftDateHeaderValue = HttpResponseMessageUtils.GetHeaderSingleValueOrDefault(request.Headers, Constants.HeaderConstants.Date); if (string.IsNullOrEmpty(microsoftDateHeaderValue)) { canonicalizedString.AppendCanonicalizedElement(AuthenticationUtility.GetCanonicalizedHeaderValue(request.Headers.Date)); } else if (allowMicrosoftDateHeader) { canonicalizedString.AppendCanonicalizedElement(microsoftDateHeaderValue); } else { canonicalizedString.AppendCanonicalizedElement(null); } }