/// <summary> /// Append default values required by OData to specified HTTP header. /// /// When header name is ODataConstants.ContentTypeHeader, if header value is application/json /// append the following default values for 4.0: /// odata.metadata=minimal /// odata.streaming=true /// IEEE754Compatible=false /// append the following default values for 4.01: /// metadata=minimal /// streaming=true /// IEEE754Compatible=false /// </summary> /// <param name="headerName">The name of the header to append default values.</param> /// <param name="headerValue">The original header value string.</param> /// <param name="version">The ODataVersion for which to create the default header value</param> /// <returns>The header value string with appended default values.</returns> public static string AppendDefaultHeaderValue(string headerName, string headerValue, ODataVersion version) { if (string.CompareOrdinal(headerName, ODataConstants.ContentTypeHeader) != 0) { return(headerValue); } if (headerValue == null) { return(null); } var mediaTypeList = HttpUtils.MediaTypesFromString(headerValue); var mediaType = mediaTypeList.Single().Key; var encoding = HttpUtils.GetEncodingFromCharsetName(mediaTypeList.Single().Value); if (string.CompareOrdinal(mediaType.FullTypeName, MimeConstants.MimeApplicationJson) != 0) { return(headerValue); } var extendedParameters = new List <KeyValuePair <string, string> >(); var extendedMediaType = new ODataMediaType(mediaType.Type, mediaType.SubType, extendedParameters); var hasMetadata = false; var hasStreaming = false; var hasIeee754Compatible = false; if (mediaType.Parameters != null) { foreach (var parameter in mediaType.Parameters) { extendedParameters.Add(parameter); if (HttpUtils.IsMetadataParameter(parameter.Key)) { hasMetadata = true; } if (HttpUtils.IsStreamingParameter(parameter.Key)) { hasStreaming = true; } if (string.Compare(parameter.Key, MimeConstants.MimeIeee754CompatibleParameterName, StringComparison.OrdinalIgnoreCase) == 0) { hasIeee754Compatible = true; } } } if (!hasMetadata) { extendedParameters.Add(new KeyValuePair <string, string>( version < ODataVersion.V401 ? MimeConstants.MimeMetadataParameterName : MimeConstants.MimeShortMetadataParameterName, MimeConstants.MimeMetadataParameterValueMinimal)); } if (!hasStreaming) { extendedParameters.Add(new KeyValuePair <string, string>( version < ODataVersion.V401 ? MimeConstants.MimeStreamingParameterName : MimeConstants.MimeShortStreamingParameterName, MimeConstants.MimeParameterValueTrue)); } if (!hasIeee754Compatible) { extendedParameters.Add(new KeyValuePair <string, string>( MimeConstants.MimeIeee754CompatibleParameterName, MimeConstants.MimeParameterValueFalse)); } return(extendedMediaType.ToText(encoding)); }