public void UpdateFromHeaders(HttpResponseHeaders headers) { if (headers.Contains("X-RateLimit-Reset")) { ResetAt = new DateTime(1970, 1, 1).AddSeconds(double.Parse(headers.GetFirstValue("X-RateLimit-Reset"))); } if (headers.Contains("X-RateLimit-Limit")) { Max = int.Parse(headers.GetFirstValue("X-RateLimit-Limit")); } if (headers.Contains("X-RateLimit-Remaining")) { Remaining = int.Parse(headers.GetFirstValue("X-RateLimit-Remaining")); } }
/// <summary> /// Deserialize a request to a JsonDocument /// </summary> public static JsonDocumentMetadata DeserializeJsonDocumentMetadata(string key, HttpResponseHeaders headers, HttpStatusCode statusCode) { RavenJObject meta = null; try { meta = headers.FilterHeadersToObject(); } catch (JsonReaderException jre) { throw new JsonReaderException("Invalid Json Response", jre); } var etag = headers.ETag.Tag; string lastModified = headers.GetFirstValue(Constants.RavenLastModified) ?? headers.GetFirstValue(Constants.LastModified); var dateTime = DateTime.ParseExact(lastModified, new[] { "o", "r" }, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind); var lastModifiedDate = DateTime.SpecifyKind(dateTime, DateTimeKind.Utc); return(new JsonDocumentMetadata { NonAuthoritativeInformation = statusCode == HttpStatusCode.NonAuthoritativeInformation, Key = key, Etag = HttpExtensions.EtagHeaderToEtag(etag), LastModified = lastModifiedDate, Metadata = meta }); }
private static DateTime?GetLastModifiedDate(HttpResponseHeaders headers) { var lastModified = headers.GetAllValues(Constants.RavenLastModified); if (lastModified == null || lastModified.Length != 1) { var dt = DateTime.ParseExact(headers.GetFirstValue(Constants.LastModified), new[] { "o", "r" }, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind); return(DateTime.SpecifyKind(dt, DateTimeKind.Utc)); } return(DateTime.ParseExact(lastModified[0], new[] { "o", "r" }, CultureInfo.InvariantCulture, DateTimeStyles.RoundtripKind)); }
internal RavenJToken GetCachedResponse(HttpJsonRequest httpJsonRequest, HttpResponseHeaders additionalHeaders) { if (httpJsonRequest.CachedRequestDetails == null) { throw new InvalidOperationException("Cannot get cached response from a request that has no cached information"); } httpJsonRequest.ResponseStatusCode = HttpStatusCode.NotModified; httpJsonRequest.ResponseHeaders = new NameValueCollection(httpJsonRequest.CachedRequestDetails.Headers); if (additionalHeaders != null) { string forcePrimaryServerCHeck = additionalHeaders.GetFirstValue(Constants.RavenForcePrimaryServerCheck); if (forcePrimaryServerCHeck != null) { httpJsonRequest.ResponseHeaders.Add(Constants.RavenForcePrimaryServerCheck, forcePrimaryServerCHeck); } } IncrementCachedRequests(); return(httpJsonRequest.CachedRequestDetails.Data.CloneToken()); }