/// <summary> /// Create message writer settings for producing requests. /// </summary> /// <param name="isBatchPartRequest">if set to <c>true</c> indicates that this is a part of a batch request.</param> /// <param name="enableAtom">Whether to enable ATOM.</param> /// <param name="odataSimplified">Whether to enable OData Simplified.</param> /// <returns>Newly created message writer settings.</returns> internal ODataMessageWriterSettings CreateSettings(bool isBatchPartRequest, bool enableAtom, bool odataSimplified) { ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings { CheckCharacters = false, Indent = false, ODataSimplified = odataSimplified, // For operations inside batch, we need to dispose the stream. For top level requests, // we do not need to dispose the stream. Since for inner batch requests, the request // message is an internal implementation of IODataRequestMessage in ODataLib, // we can do this here. DisableMessageStreamDisposal = !isBatchPartRequest }; #if !DNXCORE50 if (enableAtom) { // Enable ATOM for client writerSettings.EnableAtomSupport(); } #endif CommonUtil.SetDefaultMessageQuotas(writerSettings.MessageQuotas); // Enable the Astoria client behavior in ODataLib. writerSettings.EnableWcfDataServicesClientBehavior(); this.requestInfo.Configurations.RequestPipeline.ExecuteWriterSettingsConfiguration(writerSettings); return writerSettings; }
/// <summary> /// Determines the response format based on the results of content negotiation. /// </summary> /// <param name="payloadKind">The payload kind of the response.</param> /// <param name="acceptableMediaTypes"> /// The acceptable media types used to determine the content type of the message. /// This is a comma separated list of content types as specified in RFC 2616, Section 14.1 /// </param> /// <param name="acceptableCharSets"> /// The acceptable charsets to use to the determine the encoding of the message. /// This is a comma separated list of charsets as specified in RFC 2616, Section 14.2 /// </param> /// <returns>The format the response should use. </returns> internal ODataFormatWithParameters DetermineResponseFormat(ODataPayloadKind payloadKind, string acceptableMediaTypes, string acceptableCharSets) { Debug.Assert(payloadKind != ODataPayloadKind.Unsupported, "kind != ODataPayloadKind.Unsupported"); ContentNegotiationResponseMessage responseMessage = new ContentNegotiationResponseMessage(); ODataMessageWriterSettings settings = new ODataMessageWriterSettings { Version = this.responseVersion }; settings.EnableAtomSupport(); settings.SetContentType(acceptableMediaTypes, acceptableCharSets); try { using (ODataMessageWriter writer = new ODataMessageWriter(responseMessage, settings)) { ODataFormat format = ODataUtils.SetHeadersForPayload(writer, payloadKind); return new ODataFormatWithParameters(format, responseMessage.ContentType); } } catch (ODataContentTypeException exception) { if (this.throwIfNoMatch) { throw new DataServiceException(415, null, Microsoft.OData.Service.Strings.DataServiceException_UnsupportedMediaType, null, exception); } return null; } }
/// <summary> /// Creates a new message writer settings instance. /// </summary> /// <returns>A new settings instance.</returns> internal static ODataMessageWriterSettings CreateMessageWriterSettings() { var writerSettings = new ODataMessageWriterSettings { Indent = false, CheckCharacters = false }; writerSettings.EnableAtomSupport(); CommonUtil.SetDefaultMessageQuotas(writerSettings.MessageQuotas); return writerSettings; }