public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType) { base.SetDefaultContentHeaders(type, headers, mediaType); headers.Add("Access-Control-Allow-Origin", "*"); }
public override void SetDefaultContentHeaders (Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType) { base.SetDefaultContentHeaders(type, headers, mediaType); headers.Add("Content-Disposition", "attachment; filename = " + "TLGX_API_" + DateTime.Now.ToString("yyyyMMddhhmmssfff") + ".json"); }
public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType) { InnerFormatter.SetDefaultContentHeaders(type, headers, mediaType); }
private object ReadFromStream(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger) { object result; HttpContentHeaders contentHeaders = content == null ? null : content.Headers; // If content length is 0 then return default value for this type if (contentHeaders == null || contentHeaders.ContentLength == 0) { result = GetDefaultValueForType(type); } else { IEdmModel model = Request.ODataProperties().Model; if (model == null) { throw Error.InvalidOperation(SRResources.RequestMustHaveModel); } IEdmTypeReference expectedPayloadType; ODataDeserializer deserializer = GetDeserializer(type, Request.ODataProperties().Path, model, _deserializerProvider, out expectedPayloadType); if (deserializer == null) { throw Error.Argument("type", SRResources.FormatterReadIsNotSupportedForType, type.FullName, GetType().FullName); } try { ODataMessageReaderSettings oDataReaderSettings = new ODataMessageReaderSettings(MessageReaderSettings); oDataReaderSettings.BaseUri = GetBaseAddressInternal(Request); IODataRequestMessage oDataRequestMessage = new ODataMessageWrapper(readStream, contentHeaders, Request.GetODataContentIdMapping()); ODataMessageReader oDataMessageReader = new ODataMessageReader(oDataRequestMessage, oDataReaderSettings, model); Request.RegisterForDispose(oDataMessageReader); ODataPath path = Request.ODataProperties().Path; ODataDeserializerContext readContext = new ODataDeserializerContext { Path = path, Model = model, Request = Request, ResourceType = type, ResourceEdmType = expectedPayloadType, RequestContext = Request.GetRequestContext(), }; result = deserializer.Read(oDataMessageReader, type, readContext); } catch (Exception e) { if (formatterLogger == null) { throw; } formatterLogger.LogError(String.Empty, e); result = GetDefaultValueForType(type); } } return(result); }
public QueryResult(Stream stream, IReadOnlyDictionary <string, Attachment> attachments, HttpContentHeaders contentHeaders, HttpStatusCode status) { Stream = stream; Attachments = attachments; ContentHeaders = contentHeaders; Status = status; }
/// <summary> /// When a MIME multipart body part has been parsed this method is called to get a stream for where to write the body part to. /// </summary> /// <param name="parent">The parent <see cref="HttpContent"/> MIME multipart instance.</param> /// <param name="headers">The header fields describing the body parts content. Looking for header fields such as /// Content-Type and Content-Disposition can help provide the appropriate stream. In addition to using the information /// in the provided header fields, it is also possible to add new header fields or modify existing header fields. This can /// be useful to get around situations where the Content-type may say <b>application/octet-stream</b> but based on /// analyzing the <b>Content-Disposition</b> header field it is found that the content in fact is <b>application/json</b>, for example.</param> /// <returns>A stream instance where the contents of a body part will be written to.</returns> public abstract Stream GetStream(HttpContent parent, HttpContentHeaders headers);
private void WriteToStream(Type type, object value, Stream writeStream, HttpContent content, HttpContentHeaders contentHeaders) { IEdmModel model = Request.GetEdmModel(); if (model == null) { throw Error.InvalidOperation(SRResources.RequestMustHaveModel); } ODataSerializer serializer = GetSerializer(type, value, model, _serializerProvider); UrlHelper urlHelper = Request.GetUrlHelper(); Contract.Assert(urlHelper != null); ODataPath path = Request.GetODataPath(); IEdmEntitySet targetEntitySet = path == null ? null : path.EntitySet; // serialize a response HttpConfiguration configuration = Request.GetConfiguration(); if (configuration == null) { throw Error.InvalidOperation(SRResources.RequestMustContainConfiguration); } IODataResponseMessage responseMessage = new ODataMessageWrapper(writeStream, content.Headers); ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings() { BaseUri = GetBaseAddress(Request), Version = _version, Indent = true, DisableMessageStreamDisposal = true, MessageQuotas = MessageWriterQuotas }; // The MetadataDocumentUri is never required for errors. Additionally, it sometimes won't be available // for errors, such as when routing itself fails. In that case, the route data property is not // available on the request, and due to a bug with HttpRoute.GetVirtualPath (bug #669) we won't be able // to generate a metadata link. if (serializer.ODataPayloadKind != ODataPayloadKind.Error) { string metadataLink = urlHelper.ODataLink(new MetadataPathSegment()); if (metadataLink == null) { throw new SerializationException(SRResources.UnableToDetermineMetadataUrl); } string selectClause = GetSelectClause(Request); writerSettings.SetMetadataDocumentUri(new Uri(metadataLink), selectClause); } MediaTypeHeaderValue contentType = null; if (contentHeaders != null && contentHeaders.ContentType != null) { contentType = contentHeaders.ContentType; } using (ODataMessageWriter messageWriter = new ODataMessageWriter(responseMessage, writerSettings, model)) { ODataSerializerContext writeContext = new ODataSerializerContext() { Request = Request, RequestContext = Request.GetRequestContext(), Url = urlHelper, EntitySet = targetEntitySet, Model = model, RootElementName = GetRootElementName(path) ?? "root", SkipExpensiveAvailabilityChecks = serializer.ODataPayloadKind == ODataPayloadKind.Feed, Path = path, MetadataLevel = ODataMediaTypes.GetMetadataLevel(contentType), SelectExpandClause = Request.GetSelectExpandClause() }; serializer.WriteObject(value, type, messageWriter, writeContext); } }
/// <inheritdoc/> public override Task <object> ReadFromStreamAsync(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger) { if (type == null) { throw Error.ArgumentNull("type"); } if (readStream == null) { throw Error.ArgumentNull("readStream"); } return(TaskHelpers.RunSynchronously <object>(() => { object result; HttpContentHeaders contentHeaders = content == null ? null : content.Headers; // If content length is 0 then return default value for this type if (contentHeaders != null && contentHeaders.ContentLength == 0) { result = GetDefaultValueForType(type); } else { bool isPatchMode = TryGetInnerTypeForDelta(ref type); ODataDeserializer deserializer = ODataDeserializerProvider.GetODataDeserializer(type); if (deserializer == null) { throw Error.Argument("type", SRResources.FormatterReadIsNotSupportedForType, type.FullName, GetType().FullName); } ODataMessageReader oDataMessageReader = null; ODataMessageReaderSettings oDataReaderSettings = new ODataMessageReaderSettings { DisableMessageStreamDisposal = true }; try { IODataRequestMessage oDataRequestMessage = new ODataMessageWrapper(readStream, contentHeaders); oDataMessageReader = new ODataMessageReader(oDataRequestMessage, oDataReaderSettings, ODataDeserializerProvider.EdmModel); ODataDeserializerContext readContext = new ODataDeserializerContext { IsPatchMode = isPatchMode, PatchKeyMode = PatchKeyMode, Request = Request, Model = Model }; result = deserializer.Read(oDataMessageReader, readContext); } catch (Exception e) { if (formatterLogger == null) { throw; } formatterLogger.LogError(String.Empty, e); result = GetDefaultValueForType(type); } finally { if (oDataMessageReader != null) { oDataMessageReader.Dispose(); } } } return result; })); }
public string GetOriginalName(HttpContentHeaders headers) => headers.ContentDisposition.FileName.Replace("\"", string.Empty);
public override string GetLocalFileName(HttpContentHeaders headers) => $"{Guid.NewGuid().ToString()}{Path.GetExtension(GetOriginalName(headers))}";
/**************************************************************************/ private void ProcessResponseHttpHeaders(MacroscopeHttpTwoClientResponse Response) { HttpResponseMessage ResponseMessage = Response.GetResponse(); HttpResponseHeaders ResponseHeaders = ResponseMessage.Headers; HttpContentHeaders ContentHeaders = ResponseMessage.Content.Headers; /** Status Code ------------------------------------------------------ **/ this.SetStatusCode(ResponseMessage.StatusCode); this.SetErrorCondition(ResponseMessage.ReasonPhrase); try { switch (this.GetStatusCode()) { // 200 Range case HttpStatusCode.OK: this.SetIsNotRedirect(); break; // 300 Range case HttpStatusCode.Moved: this.SetErrorCondition(HttpStatusCode.Moved.ToString()); this.SetIsRedirect(); break; case HttpStatusCode.SeeOther: this.SetErrorCondition(HttpStatusCode.SeeOther.ToString()); this.SetIsRedirect(); break; case HttpStatusCode.Found: this.SetErrorCondition(HttpStatusCode.Redirect.ToString()); this.SetIsRedirect(); break; // 400 Range case HttpStatusCode.BadRequest: this.SetErrorCondition(HttpStatusCode.BadRequest.ToString()); this.SetIsNotRedirect(); break; case HttpStatusCode.Unauthorized: this.SetErrorCondition(HttpStatusCode.Unauthorized.ToString()); this.SetIsNotRedirect(); break; case HttpStatusCode.PaymentRequired: this.SetErrorCondition(HttpStatusCode.PaymentRequired.ToString()); this.SetIsNotRedirect(); break; case HttpStatusCode.Forbidden: this.SetErrorCondition(HttpStatusCode.Forbidden.ToString()); this.SetIsNotRedirect(); break; case HttpStatusCode.NotFound: this.SetErrorCondition(HttpStatusCode.NotFound.ToString()); this.SetIsNotRedirect(); break; case HttpStatusCode.MethodNotAllowed: this.SetErrorCondition(HttpStatusCode.MethodNotAllowed.ToString()); this.SetIsNotRedirect(); break; case HttpStatusCode.Gone: this.SetErrorCondition(HttpStatusCode.Gone.ToString()); this.SetIsNotRedirect(); break; case HttpStatusCode.RequestUriTooLong: this.SetErrorCondition(HttpStatusCode.RequestUriTooLong.ToString()); this.SetIsNotRedirect(); break; // Unhandled default: throw new MacroscopeDocumentException("Unhandled HttpStatusCode Type"); } } catch (MacroscopeDocumentException ex) { this.DebugMsg(string.Format("MacroscopeDocumentException: {0}", ex.Message)); } /** Raw HTTP Headers ------------------------------------------------- **/ this.SetHttpResponseStatusLine(Response: Response); this.SetHttpResponseHeaders(Response: Response); /** Server Information ----------------------------------------------- **/ /*{ * this.ServerName = ResponseHeaders.Server.First().ToString(); * }*/ /** PROBE HTTP HEADERS ----------------------------------------------- **/ /** Server HTTP Header ----------------------------------------------- **/ try { HttpHeaderValueCollection <ProductInfoHeaderValue> HeaderValue = ResponseHeaders.Server; if (HeaderValue != null) { if (HeaderValue.FirstOrDefault() != null) { this.SetServerName(HeaderValue.FirstOrDefault().ToString()); } } } catch (Exception ex) { this.DebugMsg(ex.Message); FindHttpResponseHeaderCallback Callback = delegate(IEnumerable <string> HeaderValues) { this.SetServerName(HeaderValues.First().ToString()); return(true); }; if (!this.FindHttpResponseHeader(ResponseHeaders: ResponseHeaders, HeaderName: "server", Callback: Callback)) { this.FindHttpContentHeader(ContentHeaders: ContentHeaders, HeaderName: "server", Callback: Callback); } } this.DebugMsg(string.Format("this.ServerName: {0}", this.ServerName)); /** Content-Type HTTP Header ----------------------------------------- **/ try { MediaTypeHeaderValue HeaderValue = ContentHeaders.ContentType; if (HeaderValue != null) { this.DebugMsg(string.Format("HeaderValue: {0}", HeaderValue)); this.MimeType = HeaderValue.MediaType; if (HeaderValue.CharSet != null) { this.SetCharacterSet(HeaderValue.CharSet); // TODO: Implement character set probing this.SetCharacterEncoding(NewEncoding: new UTF8Encoding()); } } } catch (Exception ex) { this.DebugMsg(string.Format("MediaType Exception: {0}", ex.Message)); this.MimeType = MacroscopeConstants.DefaultMimeType; } this.DebugMsg(string.Format("this.MimeType: {0}", this.MimeType)); /** Content-Length HTTP Header --------------------------------------- **/ try { long?HeaderValue = null; if (ContentHeaders.Contains("Content-Length")) { HeaderValue = ContentHeaders.ContentLength; } if (HeaderValue != null) { this.ContentLength = HeaderValue; } else { this.ContentLength = 0; } } catch (Exception ex) { this.DebugMsg(ex.Message); this.SetContentLength(Length: 0); FindHttpResponseHeaderCallback Callback = delegate(IEnumerable <string> HeaderValues) { this.SetContentLength(Length: long.Parse(HeaderValues.FirstOrDefault())); return(true); }; if (!this.FindHttpResponseHeader(ResponseHeaders: ResponseHeaders, HeaderName: "content-length", Callback: Callback)) { this.FindHttpContentHeader(ContentHeaders: ContentHeaders, HeaderName: "content-length", Callback: Callback); } } this.DebugMsg(string.Format("this.GetContentLength(): {0}", this.GetContentLength())); /** Content-Encoding HTTP Header ------------------------------------- **/ try { ICollection <string> HeaderValue = ContentHeaders.ContentEncoding; if (HeaderValue != null) { this.ContentEncoding = HeaderValue.FirstOrDefault(); } } catch (Exception ex) { this.DebugMsg(ex.Message); FindHttpResponseHeaderCallback Callback = delegate(IEnumerable <string> HeaderValues) { this.ContentEncoding = HeaderValues.FirstOrDefault(); return(true); }; if (!this.FindHttpResponseHeader(ResponseHeaders: ResponseHeaders, HeaderName: "content-encoding", Callback: Callback)) { this.FindHttpContentHeader(ContentHeaders: ContentHeaders, HeaderName: "content-encoding", Callback: Callback); } } if (string.IsNullOrEmpty(this.CompressionMethod) && (!string.IsNullOrEmpty(this.ContentEncoding))) { this.IsCompressed = true; this.CompressionMethod = this.ContentEncoding; } this.DebugMsg(string.Format("this.ContentEncoding: {0}", this.ContentEncoding)); this.DebugMsg(string.Format("this.CompressionMethod: {0}", this.CompressionMethod)); /** Date HTTP Header ------------------------------------------------- **/ try { DateTimeOffset?HeaderValue = ResponseHeaders.Date; if (HeaderValue != null) { this.DateServer = MacroscopeDateTools.ParseHttpDate(DateString: HeaderValue.ToString()); } } catch (Exception ex) { this.DebugMsg(ex.Message); this.DateServer = new DateTime(); FindHttpResponseHeaderCallback Callback = delegate(IEnumerable <string> HeaderValues) { this.DateServer = MacroscopeDateTools.ParseHttpDate(DateString: HeaderValues.First().ToString()); return(true); }; if (!this.FindHttpResponseHeader(ResponseHeaders: ResponseHeaders, HeaderName: "date", Callback: Callback)) { this.FindHttpContentHeader(ContentHeaders: ContentHeaders, HeaderName: "date", Callback: Callback); } } this.DebugMsg(string.Format("this.DateServer: {0}", this.DateServer)); /** Last-Modified HTTP Header ---------------------------------------- **/ try { DateTimeOffset?HeaderValue = ContentHeaders.LastModified; if (HeaderValue != null) { this.DateModified = MacroscopeDateTools.ParseHttpDate(DateString: HeaderValue.ToString()); } } catch (Exception ex) { this.DebugMsg(ex.Message); this.DateModified = new DateTime(); FindHttpResponseHeaderCallback Callback = delegate(IEnumerable <string> HeaderValues) { this.DateModified = MacroscopeDateTools.ParseHttpDate(DateString: HeaderValues.First().ToString()); return(true); }; if (!this.FindHttpResponseHeader(ResponseHeaders: ResponseHeaders, HeaderName: "last-modified", Callback: Callback)) { this.FindHttpContentHeader(ContentHeaders: ContentHeaders, HeaderName: "last-modified", Callback: Callback); } } this.DebugMsg(string.Format("this.DateModified: {0}", this.DateModified)); /** Expires HTTP Header ---------------------------------------------- **/ try { DateTimeOffset?HeaderValue = ContentHeaders.Expires; if (HeaderValue != null) { this.DateExpires = MacroscopeDateTools.ParseHttpDate(DateString: HeaderValue.ToString()); } } catch (Exception ex) { this.DebugMsg(ex.Message); this.DateExpires = new DateTime(); FindHttpResponseHeaderCallback Callback = delegate(IEnumerable <string> HeaderValues) { this.DateExpires = MacroscopeDateTools.ParseHttpDate(DateString: HeaderValues.First().ToString()); return(true); }; if (!this.FindHttpResponseHeader(ResponseHeaders: ResponseHeaders, HeaderName: "expires", Callback: Callback)) { this.FindHttpContentHeader(ContentHeaders: ContentHeaders, HeaderName: "expires", Callback: Callback); } } this.DebugMsg(string.Format("this.DateExpires: {0}", this.DateExpires)); /** HTST Policy HTTP Header ------------------------------------------ **/ // https://www.owasp.org/index.php/HTTP_Strict_Transport_Security_Cheat_Sheet // Strict-Transport-Security: max-age=31536000; includeSubDomains; preload { FindHttpResponseHeaderCallback Callback = delegate(IEnumerable <string> HeaderValues) { this.HypertextStrictTransportPolicy = true; return(true); }; if (!this.FindHttpResponseHeader(ResponseHeaders: ResponseHeaders, HeaderName: "strict-transport-security", Callback: Callback)) { this.FindHttpContentHeader(ContentHeaders: ContentHeaders, HeaderName: "strict-transport-security", Callback: Callback); } } this.DebugMsg(string.Format("this.HypertextStrictTransportPolicy: {0}", this.HypertextStrictTransportPolicy)); /** Location (Redirect) HTTP Header ---------------------------------- **/ try { Uri HeaderValue = ResponseHeaders.Location; if (HeaderValue != null) { this.SetUrlRedirectTo(Url: HeaderValue.ToString()); } } catch (Exception ex) { this.DebugMsg(ex.Message); FindHttpResponseHeaderCallback Callback = delegate(IEnumerable <string> HeaderValues) { this.SetUrlRedirectTo(Url: HeaderValues.FirstOrDefault().ToString()); return(true); }; if (!this.FindHttpResponseHeader(ResponseHeaders: ResponseHeaders, HeaderName: "location", Callback: Callback)) { this.FindHttpContentHeader(ContentHeaders: ContentHeaders, HeaderName: "location", Callback: Callback); } } this.DebugMsg(string.Format("this.GetIsRedirect(): {0}", this.GetIsRedirect())); this.DebugMsg(string.Format("this.GetUrlRedirectTo(): {0}", this.GetUrlRedirectTo())); /** Link HTTP Headers ------------------------------------------------ **/ { FindHttpResponseHeaderCallback Callback = delegate(IEnumerable <string> HeaderValues) { foreach (string HeaderValue in HeaderValues) { this.DebugMsg(string.Format("HeaderValue: {0}", HeaderValue)); this.ProcessHttpLinkHeader(HttpLinkHeader: HeaderValue); } return(true); }; if (!this.FindHttpResponseHeader(ResponseHeaders: ResponseHeaders, HeaderName: "link", Callback: Callback)) { this.FindHttpContentHeader(ContentHeaders: ContentHeaders, HeaderName: "link", Callback: Callback); } } /** ETag HTTP Header ------------------------------------------------- **/ try { EntityTagHeaderValue HeaderValue = ResponseHeaders.ETag; if (HeaderValue != null) { string ETagValue = HeaderValue.Tag; if (!string.IsNullOrEmpty(ETagValue)) { this.SetEtag(HeaderValue.Tag); } } } catch (Exception ex) { this.DebugMsg(ex.Message); FindHttpResponseHeaderCallback Callback = delegate(IEnumerable <string> HeaderValues) { string HeaderValue = HeaderValues.FirstOrDefault(); if (HeaderValue != null) { if (!string.IsNullOrEmpty(HeaderValue)) { this.SetEtag(HeaderValue); } } return(true); }; if (!this.FindHttpResponseHeader(ResponseHeaders: ResponseHeaders, HeaderName: "etag", Callback: Callback)) { this.FindHttpContentHeader(ContentHeaders: ContentHeaders, HeaderName: "etag", Callback: Callback); } } this.DebugMsg(string.Format("this.Etag: {0}", this.Etag)); /** WWW-AUTHENTICATE HTTP Header ------------------------------------- **/ // Reference: http://httpbin.org/basic-auth/user/passwd try { HttpHeaderValueCollection <AuthenticationHeaderValue> HeaderValue = ResponseHeaders.WwwAuthenticate; if (HeaderValue != null) { string Scheme = null; string Realm = null; foreach (AuthenticationHeaderValue AuthenticationValue in HeaderValue) { Scheme = AuthenticationValue.Scheme; string Parameter = AuthenticationValue.Parameter; Match Matched = Regex.Match(Parameter, "^[^\"]+\"([^\"]+)\""); if (Matched.Success) { Realm = Matched.Groups[1].Value; } } if (!string.IsNullOrEmpty(Scheme) && !string.IsNullOrEmpty(Realm)) { if (Scheme.ToLower() == "basic") { this.SetAuthenticationType(MacroscopeConstants.AuthenticationType.BASIC); this.SetAuthenticationRealm(Realm); } else { this.SetAuthenticationType(MacroscopeConstants.AuthenticationType.UNSUPPORTED); } } } } catch (Exception ex) { this.DebugMsg(ex.Message); } this.DebugMsg(string.Format("WwwAuthenticate: \"{0}\", Realm: \"{1}\"", this.GetAuthenticationType(), this.GetAuthenticationRealm())); /** Process Dates ---------------------------------------------------- **/ { if (this.DateServer.Date == new DateTime().Date) { this.DateServer = DateTime.UtcNow; } if (this.DateModified.Date == new DateTime().Date) { this.DateModified = this.DateServer; } } /** Process MIME Type ------------------------------------------------ **/ { Regex reIsHtml = new Regex(@"^(text/html|application/xhtml+xml)", RegexOptions.IgnoreCase); Regex reIsCss = new Regex(@"^text/css", RegexOptions.IgnoreCase); Regex reIsJavascript = new Regex(@"^(application/javascript|text/javascript)", RegexOptions.IgnoreCase); Regex reIsImage = new Regex(@"^image/(gif|png|jpeg|bmp|webp|vnd.microsoft.icon|x-icon)", RegexOptions.IgnoreCase); Regex reIsPdf = new Regex(@"^application/pdf", RegexOptions.IgnoreCase); Regex reIsAudio = new Regex(@"^audio/[a-z0-9]+", RegexOptions.IgnoreCase); Regex reIsVideo = new Regex(@"^video/[a-z0-9]+", RegexOptions.IgnoreCase); Regex reIsXml = new Regex(@"^(application|text)/(atom\+xml|xml)", RegexOptions.IgnoreCase); Regex reIsText = new Regex(@"^(text)/(plain)", RegexOptions.IgnoreCase); if (reIsHtml.IsMatch(this.MimeType)) { this.SetDocumentType(Type: MacroscopeConstants.DocumentType.HTML); } else if (reIsCss.IsMatch(this.MimeType)) { this.SetDocumentType(Type: MacroscopeConstants.DocumentType.CSS); } else if (reIsJavascript.IsMatch(this.MimeType)) { this.SetDocumentType(Type: MacroscopeConstants.DocumentType.JAVASCRIPT); } else if (reIsImage.IsMatch(this.MimeType)) { this.SetDocumentType(Type: MacroscopeConstants.DocumentType.IMAGE); } else if (reIsPdf.IsMatch(this.MimeType)) { this.SetDocumentType(Type: MacroscopeConstants.DocumentType.PDF); } else if (reIsAudio.IsMatch(this.MimeType)) { this.SetDocumentType(Type: MacroscopeConstants.DocumentType.AUDIO); } else if (reIsVideo.IsMatch(this.MimeType)) { this.SetDocumentType(Type: MacroscopeConstants.DocumentType.VIDEO); } else if (reIsXml.IsMatch(this.MimeType)) { this.SetDocumentType(Type: MacroscopeConstants.DocumentType.XML); } else if (reIsText.IsMatch(this.MimeType)) { this.SetDocumentType(Type: MacroscopeConstants.DocumentType.TEXT); } else { this.SetDocumentType(Type: MacroscopeConstants.DocumentType.BINARY); } } /** Process Cookies -------------------------------------------------- **/ // https://stackoverflow.com/questions/29224734/how-to-read-cookies-from-httpresponsemessage { try { CookieContainer CookieMonster = MacroscopeHttpTwoClient.GetCookieMonster(); CookieCollection Biscuits = CookieMonster.GetCookies(uri: this.GetUri()); this.AddCookies(Cookies: Biscuits); this.DebugMsg("cookies"); // CookieContainer CookieTin = MacroscopeHttpTwoClient.GetCookieMonster(); // string LimpBizkit = tin.GetCookieHeader( uri: Request.RequestUri ); } catch (Exception ex) { this.DebugMsg(ex.Message); } } return; }
protected override Task OnWriteToStreamAsync(Type type, object value, Stream stream, HttpContentHeaders contentHeaders, FormatterContext formatterContext, TransportContext transportContext) { // Create a serializer JsonSerializer serializer = JsonSerializer.Create(_jsonSerializerSettings); // Create task writing the serialized content return(Task.Factory.StartNew(() => { using (JsonTextWriter jsonTextWriter = new JsonTextWriter(new StreamWriter(stream, Encoding)) { CloseOutput = false }) { serializer.Serialize(jsonTextWriter, value); jsonTextWriter.Flush(); } })); }
protected override Task <object> OnReadFromStreamAsync(Type type, Stream stream, HttpContentHeaders contentHeaders, FormatterContext formatterContext) { // Create a serializer JsonSerializer serializer = JsonSerializer.Create(_jsonSerializerSettings); // Create task reading the content return(Task.Factory.StartNew(() => { using (var streamReader = new StreamReader(stream, Encoding)) { using (var jsonTextReader = new JsonTextReader(streamReader)) { return serializer.Deserialize(jsonTextReader, type); } } })); }
/// <summary> /// Gets the blob's properties from the response. /// </summary> /// <param name="response">The web response.</param> /// <returns>The blob's properties.</returns> public static BlobProperties GetProperties(HttpResponseMessage response) { BlobProperties properties = new BlobProperties(); if (response.Content != null) { string created = response.Headers.GetHeaderSingleValueOrDefault(Constants.HeaderConstants.CreationTimeHeader); properties.Created = string.IsNullOrEmpty(created) ? (DateTimeOffset?)null : DateTimeOffset.Parse(created, CultureInfo.InvariantCulture); properties.LastModified = response.Content.Headers.LastModified; #if NETCORE HttpContentHeaders contentHeaders = response.Content.Headers; properties.ContentEncoding = HttpWebUtility.GetHeaderValues("Content-Encoding", contentHeaders); properties.ContentLanguage = HttpWebUtility.GetHeaderValues("Content-Language", contentHeaders); properties.ContentDisposition = HttpWebUtility.GetHeaderValues("Content-Disposition", contentHeaders); properties.ContentType = HttpWebUtility.GetHeaderValues("Content-Type", contentHeaders); #else properties.ContentEncoding = HttpWebUtility.CombineHttpHeaderValues(response.Content.Headers.ContentEncoding); properties.ContentLanguage = HttpWebUtility.CombineHttpHeaderValues(response.Content.Headers.ContentLanguage); if (response.Content.Headers.ContentDisposition != null) { properties.ContentDisposition = response.Content.Headers.ContentDisposition.ToString(); } if (response.Content.Headers.ContentType != null) { properties.ContentType = response.Content.Headers.ContentType.ToString(); } #endif if (response.Content.Headers.ContentMD5 != null && response.Content.Headers.ContentRange == null) { properties.ContentChecksum.MD5 = Convert.ToBase64String(response.Content.Headers.ContentMD5); } else if (!string.IsNullOrEmpty(response.Headers.GetHeaderSingleValueOrDefault(Constants.HeaderConstants.BlobContentMD5Header))) { properties.ContentChecksum.MD5 = response.Headers.GetHeaderSingleValueOrDefault(Constants.HeaderConstants.BlobContentMD5Header); } // not yet supported and tested if (!string.IsNullOrEmpty(response.Headers.GetHeaderSingleValueOrDefault(Constants.HeaderConstants.BlobContentCRC64Header))) { properties.ContentChecksum.CRC64 = response.Headers.GetHeaderSingleValueOrDefault(Constants.HeaderConstants.BlobContentCRC64Header); } string blobEncryption = response.Headers.GetHeaderSingleValueOrDefault(Constants.HeaderConstants.ServerEncrypted); properties.IsServerEncrypted = string.Equals(blobEncryption, Constants.HeaderConstants.TrueHeader, StringComparison.OrdinalIgnoreCase); string encryptionScope = response.Headers.GetHeaderSingleValueOrDefault(Constants.HeaderConstants.EncryptionScopeHeader); if (!string.IsNullOrEmpty(encryptionScope)) { properties.EncryptionScope = encryptionScope; } string incrementalCopy = response.Headers.GetHeaderSingleValueOrDefault(Constants.HeaderConstants.IncrementalCopyHeader); properties.IsIncrementalCopy = string.Equals(incrementalCopy, Constants.HeaderConstants.TrueHeader, StringComparison.OrdinalIgnoreCase); // Get the content length. Prioritize range and x-ms over content length for the special cases. string contentLengthHeader = response.Headers.GetHeaderSingleValueOrDefault(Constants.HeaderConstants.BlobContentLengthHeader); if ((response.Content.Headers.ContentRange != null) && response.Content.Headers.ContentRange.HasLength) { properties.Length = response.Content.Headers.ContentRange.Length.Value; } else if (!string.IsNullOrEmpty(contentLengthHeader)) { properties.Length = long.Parse(contentLengthHeader); } else if (response.Content.Headers.ContentLength.HasValue) { properties.Length = response.Content.Headers.ContentLength.Value; } } #if NETCORE properties.CacheControl = HttpWebUtility.GetHeaderValues("Cache-Control", response.Headers); #else if (response.Headers.CacheControl != null) { properties.CacheControl = response.Headers.CacheControl.ToString(); } #endif if (response.Headers.ETag != null) { properties.ETag = response.Headers.ETag.ToString(); } // Get blob type string blobType = response.Headers.GetHeaderSingleValueOrDefault(Constants.HeaderConstants.BlobType); if (!string.IsNullOrEmpty(blobType)) { properties.BlobType = (BlobType)Enum.Parse(typeof(BlobType), blobType, true); } // Get lease properties properties.LeaseStatus = GetLeaseStatus(response); properties.LeaseState = GetLeaseState(response); properties.LeaseDuration = GetLeaseDuration(response); // Get sequence number string sequenceNumber = response.Headers.GetHeaderSingleValueOrDefault(Constants.HeaderConstants.BlobSequenceNumber); if (!string.IsNullOrEmpty(sequenceNumber)) { properties.PageBlobSequenceNumber = long.Parse(sequenceNumber, CultureInfo.InvariantCulture); } // Get committed block count string comittedBlockCount = response.Headers.GetHeaderSingleValueOrDefault(Constants.HeaderConstants.BlobCommittedBlockCount); if (!string.IsNullOrEmpty(comittedBlockCount)) { properties.AppendBlobCommittedBlockCount = int.Parse(comittedBlockCount, CultureInfo.InvariantCulture); } // Get the tier of the blob string premiumBlobTierInferredString = response.Headers.GetHeaderSingleValueOrDefault(Constants.HeaderConstants.AccessTierInferredHeader); if (!string.IsNullOrEmpty(premiumBlobTierInferredString)) { properties.BlobTierInferred = Convert.ToBoolean(premiumBlobTierInferredString); } string blobTierString = response.Headers.GetHeaderSingleValueOrDefault(Constants.HeaderConstants.AccessTierHeader); StandardBlobTier? standardBlobTier; PremiumPageBlobTier?premiumPageBlobTier; BlobHttpResponseParsers.GetBlobTier(properties.BlobType, blobTierString, out standardBlobTier, out premiumPageBlobTier); properties.StandardBlobTier = standardBlobTier; properties.PremiumPageBlobTier = premiumPageBlobTier; // Get the rehydration status string rehydrationStatusString = response.Headers.GetHeaderSingleValueOrDefault(Constants.HeaderConstants.ArchiveStatusHeader); if (!string.IsNullOrEmpty(rehydrationStatusString)) { if (Constants.RehydratePendingToHot.Equals(rehydrationStatusString)) { properties.RehydrationStatus = RehydrationStatus.PendingToHot; } else if (Constants.RehydratePendingToCool.Equals(rehydrationStatusString)) { properties.RehydrationStatus = RehydrationStatus.PendingToCool; } else { properties.RehydrationStatus = RehydrationStatus.Unknown; } } if ((properties.PremiumPageBlobTier.HasValue || properties.StandardBlobTier.HasValue) && !properties.BlobTierInferred.HasValue) { properties.BlobTierInferred = false; } // Get the time the tier of the blob was last modified string accessTierChangeTimeString = response.Headers.GetHeaderSingleValueOrDefault(Constants.HeaderConstants.AccessTierChangeTimeHeader); if (!string.IsNullOrEmpty(accessTierChangeTimeString)) { properties.BlobTierLastModifiedTime = DateTimeOffset.Parse(accessTierChangeTimeString, CultureInfo.InvariantCulture); } return(properties); }
public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType) { // Replace the default Content-Type header ("application/json") with the ToolConsumerProfileMediaType // defined by IMS. This will also set the Content-Type header in the response. base.SetDefaultContentHeaders(type, headers, ToolConsumerProfileMediaType); }
internal static ODataMessageWrapper Create(Stream stream, HttpContentHeaders headers, IServiceProvider container) { return(ODataMessageWrapperHelper.Create(stream, headers, null, container)); }
public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType) { base.SetDefaultContentHeaders(type, headers, mediaType); headers.Add("Content-Disposition", "attachment; filename=" + _fileName); }
public override Task WriteToStreamAsync(Type type, object value, Stream writeStream, HttpContent content, TransportContext transportContext) { if (type == null) { throw Error.ArgumentNull("type"); } if (writeStream == null) { throw Error.ArgumentNull("writeStream"); } if (Request == null) { throw Error.NotSupported(SRResources.WriteToStreamAsyncMustHaveRequest); } HttpContentHeaders contentHeaders = content == null ? null : content.Headers; return(TaskHelpers.RunSynchronously(() => { // Get the format and version to use from the ODataServiceVersion content header or if not available use the // values configured for the specialized formatter instance. ODataVersion version; if (contentHeaders == null) { version = _defaultODataVersion; } else { version = GetODataVersion(contentHeaders, ODataFormatterConstants.ODataServiceVersion) ?? _defaultODataVersion; } // get the most appropriate serializer given that we support inheritance. type = value == null ? type : value.GetType(); ODataSerializer serializer = ODataSerializerProvider.GetODataPayloadSerializer(type); if (serializer == null) { throw Error.InvalidOperation(SRResources.TypeCannotBeSerialized, type.Name, typeof(ODataMediaTypeFormatter).Name); } UrlHelper urlHelper = Request.GetUrlHelper(); IEdmEntitySet targetEntitySet = null; ODataUriHelpers.TryGetEntitySetAndEntityType(Request.RequestUri, Model, out targetEntitySet); // serialize a response Uri baseAddress = new Uri(Request.RequestUri, Request.GetConfiguration().VirtualPathRoot); // TODO: Bug 467617: figure out the story for the operation name on the client side and server side. // This is clearly a workaround. We are assuming that the operation name is the last segment in the request uri // which works for most cases and fall back to the type name of the object being written. // We should rather use uri parser semantic tree to figure out the operation name from the request url. string operationName = ODataUriHelpers.GetOperationName(Request.RequestUri, baseAddress); operationName = operationName ?? type.Name; IODataResponseMessage responseMessage = new ODataMessageWrapper(writeStream); // TODO: Issue 483: http://aspnetwebstack.codeplex.com/workitem/483 // We need to set the MetadataDocumentUri when this property is added to ODataMessageWriterSettings as // part of the JSON Light work. // This is required so ODataLib can coerce AbsoluteUri's into RelativeUri's when appropriate in JSON Light. ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings() { BaseUri = baseAddress, Version = version, Indent = true, DisableMessageStreamDisposal = true }; if (contentHeaders != null && contentHeaders.ContentType != null) { writerSettings.SetContentType(contentHeaders.ContentType.ToString(), Encoding.UTF8.WebName); } using (ODataMessageWriter messageWriter = new ODataMessageWriter(responseMessage, writerSettings, ODataDeserializerProvider.EdmModel)) { ODataSerializerContext writeContext = new ODataSerializerContext() { EntitySet = targetEntitySet, UrlHelper = urlHelper, ServiceOperationName = operationName, SkipExpensiveAvailabilityChecks = serializer.ODataPayloadKind == ODataPayloadKind.Feed, Request = Request }; serializer.WriteObject(value, messageWriter, writeContext); } })); }
public override string GetLocalFileName(HttpContentHeaders headers) { return(string.Format("{0}_{1}", Guid.NewGuid().ToString("N"), Path.GetFileName(headers.ContentDisposition.FileName.Replace("\"", string.Empty)))); }
public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType) { base.SetDefaultContentHeaders(type, headers, mediaType); headers.ContentType = FhirMediaType.GetMediaTypeHeaderValue(type, ResourceFormat.Json); }
public void Constructor_ThrowsOnNullLocalFileName() { HttpContentHeaders headers = FormattingUtilities.CreateEmptyContentHeaders(); Assert.ThrowsArgumentNull(() => new MultipartFileData(headers, null), "localFileName"); }
protected override Task OnWriteToStreamAsync(Type type, object value, Stream stream, HttpContentHeaders contentHeaders, FormatterContext formatterContext, TransportContext transportContext) { if (type == typeof(JsonObject)) { return(Task.Factory.StartNew(() => { var pairs = new List <string>(); Flatten(pairs, value as JsonObject); var bytes = encoding.GetBytes(string.Join("&", pairs)); stream.Write(bytes, 0, bytes.Length); })); } else { return(base.OnWriteToStreamAsync(type, value, stream, contentHeaders, formatterContext, transportContext)); } }
public override string GetLocalFileName(HttpContentHeaders headers) { return(headers.ContentDisposition.FileName.Replace("\"", string.Empty)); }
public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType) { base.SetDefaultContentHeaders(type, headers, mediaType); }
public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType) { base.SetDefaultContentHeaders(type, headers, mediaType); headers.ContentType = new MediaTypeHeaderValue("text/html"); }
private void WriteToStream(Type type, object value, Stream writeStream, HttpContent content, HttpContentHeaders contentHeaders) { IEdmModel model = Request.ODataProperties().Model; if (model == null) { throw Error.InvalidOperation(SRResources.RequestMustHaveModel); } ODataSerializer serializer = GetSerializer(type, value, model, _serializerProvider); UrlHelper urlHelper = Request.GetUrlHelper() ?? new UrlHelper(Request); ODataPath path = Request.ODataProperties().Path; IEdmNavigationSource targetNavigationSource = path == null ? null : path.NavigationSource; // serialize a response HttpConfiguration configuration = Request.GetConfiguration(); if (configuration == null) { throw Error.InvalidOperation(SRResources.RequestMustContainConfiguration); } string preferHeader = RequestPreferenceHelpers.GetRequestPreferHeader(Request); string annotationFilter = null; if (!String.IsNullOrEmpty(preferHeader)) { ODataMessageWrapper messageWrapper = new ODataMessageWrapper(writeStream, content.Headers); messageWrapper.SetHeader(RequestPreferenceHelpers.PreferHeaderName, preferHeader); annotationFilter = messageWrapper.PreferHeader().AnnotationFilter; } IODataResponseMessage responseMessage = new ODataMessageWrapper(writeStream, content.Headers); if (annotationFilter != null) { responseMessage.PreferenceAppliedHeader().AnnotationFilter = annotationFilter; } Uri baseAddress = GetBaseAddressInternal(Request); ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings(MessageWriterSettings) { PayloadBaseUri = baseAddress, Version = _version, }; string metadataLink = urlHelper.CreateODataLink(new MetadataPathSegment()); if (metadataLink == null) { throw new SerializationException(SRResources.UnableToDetermineMetadataUrl); } writerSettings.ODataUri = new ODataUri { ServiceRoot = baseAddress, // TODO: 1604 Convert webapi.odata's ODataPath to ODL's ODataPath, or use ODL's ODataPath. SelectAndExpand = Request.ODataProperties().SelectExpandClause, Apply = Request.ODataProperties().ApplyClause, Path = (path == null || IsOperationPath(path)) ? null : path.ODLPath, }; MediaTypeHeaderValue contentType = null; if (contentHeaders != null && contentHeaders.ContentType != null) { contentType = contentHeaders.ContentType; } using (ODataMessageWriter messageWriter = new ODataMessageWriter(responseMessage, writerSettings, model)) { ODataSerializerContext writeContext = new ODataSerializerContext() { Request = Request, RequestContext = Request.GetRequestContext(), Url = urlHelper, NavigationSource = targetNavigationSource, Model = model, RootElementName = GetRootElementName(path) ?? "root", SkipExpensiveAvailabilityChecks = serializer.ODataPayloadKind == ODataPayloadKind.Feed, Path = path, MetadataLevel = ODataMediaTypes.GetMetadataLevel(contentType), SelectExpandClause = Request.ODataProperties().SelectExpandClause }; serializer.WriteObject(value, type, messageWriter, writeContext); } }
public override Stream GetStream(HttpContent parent, HttpContentHeaders headers) { if (parent == null) { throw new ArgumentNullException("parent"); } if (headers == null) { throw new ArgumentNullException("headers"); } //判断当前内容项是否为普通表单域,如果是则返回一个内存流 if (headers.ContentDisposition == null || string.IsNullOrEmpty(headers.ContentDisposition.FileName)) { //在表单数据标记列表中按顺序将当前内容标记为普通表单域 _isFormData.Add(true); //返回一个新的内存流 return(new MemoryStream()); } //获取当前内容项的内容类型 var contentType = headers.ContentType == null ? string.Empty : headers.ContentType.MediaType; if (string.IsNullOrWhiteSpace(contentType)) { contentType = System.Web.MimeMapping.GetMimeMapping(headers.ContentDisposition.FileName); } string fileName = null; var dispositionName = UnquoteToken(headers.ContentDisposition.Name); var extensionName = System.IO.Path.GetExtension(UnquoteToken(headers.ContentDisposition.FileName)); if (!string.IsNullOrWhiteSpace(dispositionName)) { //获取请求头中显式指定的文件名(注意:该文件名支持模板格式) if (_headers.TryGetValue(dispositionName + ".name", out fileName)) { fileName = Zongsoft.Text.TemplateEvaluatorManager.Default.Evaluate <string>(fileName, null).ToLowerInvariant() + extensionName; } } //定义文件写入的模式 bool overwrite = false; //定义文件的扩展名是否自动添加 bool extensionAppend = true; //执行写入前的回调方法 if (_onWriting != null) { //创建回调参数 var args = new WritingEventArgs(_directoryPath, fileName, Interlocked.Increment(ref _index)); //执行写入前的回调 _onWriting(args); if (args.Cancel) { return(null); } //获取文件写入参数 fileName = args.FileName; overwrite = args.Overwrite; extensionAppend = args.ExtensionAppend; } //如果文件名为空,则生成一个以“当前日期-时间-随机数.ext”的默认文件名 if (string.IsNullOrWhiteSpace(fileName)) { fileName = string.Format("{0:yyyyMMdd-HHmmss}-{1}{2}", DateTime.Now, (uint)Zongsoft.Common.RandomGenerator.GenerateInt32(), extensionAppend ? extensionName : string.Empty); } else if (extensionAppend && !fileName.EndsWith(extensionName)) { fileName = fileName + extensionName; } //生成文件的完整路径 var filePath = Zongsoft.IO.Path.Combine(_directoryPath, fileName); //生成文件信息的描述实体 var fileInfo = new Zongsoft.IO.FileInfo(filePath, (headers.ContentDisposition.Size.HasValue ? headers.ContentDisposition.Size.Value : -1), DateTime.Now, null, FileSystem.GetUrl(filePath)) { Type = contentType, }; //将上传的文件项的键名加入到文件描述实体的扩展属性中 if (!string.IsNullOrWhiteSpace(dispositionName)) { fileInfo.Properties.Add(EXTENDED_PROPERTY_DISPOSITIONNAME, dispositionName); } //将上传的原始文件名加入到文件描述实体的扩展属性中 fileInfo.Properties.Add(EXTENDED_PROPERTY_FILENAME, Uri.UnescapeDataString(UnquoteToken(headers.ContentDisposition.FileName))); if (_headers != null && _headers.Count > 0 && !string.IsNullOrWhiteSpace(dispositionName)) { //从全局头里面查找当前上传文件的自定义属性 foreach (var header in _headers) { if (header.Key.Length > dispositionName.Length + 1 && header.Key.StartsWith(dispositionName + "-", StringComparison.OrdinalIgnoreCase)) { fileInfo.Properties.Add(header.Key.Substring(dispositionName.Length + 1), header.Value); } } } //将文件信息对象加入到集合中 _fileData.Add(fileInfo); //在表单数据标记列表中按顺序将当前内容标记为非普通表单域(即二进制文件域) _isFormData.Add(false); try { //调用文件系统根据完整文件路径去创建一个新建文件流 var stream = FileSystem.File.Open(filePath, (overwrite ? FileMode.Create : FileMode.CreateNew), FileAccess.Write, (fileInfo.HasProperties ? fileInfo.Properties : null)); fileInfo.Properties.Add(EXTENDED_PROPERTY_FILESTREAM, stream); return(stream); } catch { if (fileInfo != null) { _fileData.Remove(fileInfo); } throw; } }
public override void SetDefaultContentHeaders(Type type, HttpContentHeaders headers, MediaTypeHeaderValue mediaType) { base.SetDefaultContentHeaders(type, headers, mediaType); headers.ContentType = new MediaTypeHeaderValue("application/json"); }
internal static ODataMessageWrapper Create(Stream stream, HttpContentHeaders headers) { return(ODataMessageWrapperHelper.Create(stream, headers, contentIdMapping: null)); }
public override Task WriteToStreamAsync(Type type, object value, Stream stream, HttpContentHeaders contentHeaders, TransportContext transportContext) { string callback; if (IsJsonpRequest(out callback)) { return Task.Factory.StartNew(() => { var writer = new StreamWriter(stream); writer.Write(callback + "("); writer.Flush(); base.WriteToStreamAsync(type, value, stream, contentHeaders, transportContext).Wait(); writer.Write(")"); writer.Flush(); }); } else { return base.WriteToStreamAsync(type, value, stream, contentHeaders, transportContext); } }
public override string GetLocalFileName(HttpContentHeaders headers) { return(base.GetLocalFileName(headers) + Path.GetExtension(headers.ContentDisposition.FileName.Replace("\"", ""))); }