From 406a3853afb44d7b7bc5ade4849e3001e9de1720 Mon Sep 17 00:00:00 2001 From: Kiran Challa Date: Fri, 26 Jun 2015 09:49:32 -0700 Subject: [PATCH] React to newly added api MediaTypeHeaderValue.Clone() #2569 --- .../OutputFormatter.cs | 4 ++-- .../StringOutputFormatter.cs | 2 +- .../ContentResult.cs | 5 ++--- .../FormatterMappings.cs | 2 +- .../Formatters/JsonInputFormatter.cs | 4 ++-- .../Formatters/JsonOutputFormatter.cs | 4 ++-- .../Formatters/JsonPatchInputFormatter.cs | 2 +- .../Formatters/MediaTypeHeaderValues.cs | 19 +++++++++++++++++++ .../JsonResult.cs | 5 ++--- .../ViewExecutor.cs | 5 ++--- .../MediaTypeHeaderValues.cs | 16 ++++++++++++++++ ...XmlDataContractSerializerInputFormatter.cs | 4 ++-- ...mlDataContractSerializerOutputFormatter.cs | 4 ++-- .../XmlSerializerInputFormatter.cs | 4 ++-- .../XmlSerializerOutputFormatter.cs | 4 ++-- 15 files changed, 58 insertions(+), 26 deletions(-) create mode 100644 src/Microsoft.AspNet.Mvc.Extensions/Formatters/MediaTypeHeaderValues.cs create mode 100644 src/Microsoft.AspNet.Mvc.Xml/MediaTypeHeaderValues.cs diff --git a/src/Microsoft.AspNet.Mvc.Core/OutputFormatter.cs b/src/Microsoft.AspNet.Mvc.Core/OutputFormatter.cs index 55f693eea2..18af391512 100644 --- a/src/Microsoft.AspNet.Mvc.Core/OutputFormatter.cs +++ b/src/Microsoft.AspNet.Mvc.Core/OutputFormatter.cs @@ -179,8 +179,8 @@ namespace Microsoft.AspNet.Mvc throw new InvalidOperationException(Resources.FormatOutputFormatterNoMediaType(GetType().FullName)); } - // Clone the media type as we don't want it to affect the next request - selectedMediaType = MediaTypeHeaderValue.Parse(selectedMediaType.ToString()); + // Copy the media type as we don't want it to affect the next request + selectedMediaType = selectedMediaType.Copy(); var selectedEncoding = SelectCharacterEncoding(context); if (selectedEncoding == null) diff --git a/src/Microsoft.AspNet.Mvc.Core/StringOutputFormatter.cs b/src/Microsoft.AspNet.Mvc.Core/StringOutputFormatter.cs index a4640da362..2628020d94 100644 --- a/src/Microsoft.AspNet.Mvc.Core/StringOutputFormatter.cs +++ b/src/Microsoft.AspNet.Mvc.Core/StringOutputFormatter.cs @@ -17,7 +17,7 @@ namespace Microsoft.AspNet.Mvc { SupportedEncodings.Add(Encoding.UTF8); SupportedEncodings.Add(Encoding.Unicode); - SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("text/plain")); + SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("text/plain").CopyAsReadOnly()); } public override bool CanWriteResult(OutputFormatterContext context, MediaTypeHeaderValue contentType) diff --git a/src/Microsoft.AspNet.Mvc.Extensions/ContentResult.cs b/src/Microsoft.AspNet.Mvc.Extensions/ContentResult.cs index 85d346bb10..3936736187 100644 --- a/src/Microsoft.AspNet.Mvc.Extensions/ContentResult.cs +++ b/src/Microsoft.AspNet.Mvc.Extensions/ContentResult.cs @@ -46,9 +46,8 @@ namespace Microsoft.AspNet.Mvc { if (contentTypeHeader.Encoding == null) { - // 1. Do not modify the user supplied content type - // 2. Parse here to handle parameters apart from charset - contentTypeHeader = MediaTypeHeaderValue.Parse(contentTypeHeader.ToString()); + // Do not modify the user supplied content type, so copy it instead + contentTypeHeader = contentTypeHeader.Copy(); contentTypeHeader.Encoding = Encoding.UTF8; encoding = Encoding.UTF8; diff --git a/src/Microsoft.AspNet.Mvc.Extensions/FormatterMappings.cs b/src/Microsoft.AspNet.Mvc.Extensions/FormatterMappings.cs index fc24ee5dfe..02e530ae4c 100644 --- a/src/Microsoft.AspNet.Mvc.Extensions/FormatterMappings.cs +++ b/src/Microsoft.AspNet.Mvc.Extensions/FormatterMappings.cs @@ -27,7 +27,7 @@ namespace Microsoft.AspNet.Mvc { ValidateContentType(contentType); format = RemovePeriodIfPresent(format); - _map[format] = MediaTypeHeaderValue.Parse(contentType.ToString()); + _map[format] = contentType.CopyAsReadOnly(); } /// diff --git a/src/Microsoft.AspNet.Mvc.Extensions/Formatters/JsonInputFormatter.cs b/src/Microsoft.AspNet.Mvc.Extensions/Formatters/JsonInputFormatter.cs index 60d2d57224..3f910e0a2b 100644 --- a/src/Microsoft.AspNet.Mvc.Extensions/Formatters/JsonInputFormatter.cs +++ b/src/Microsoft.AspNet.Mvc.Extensions/Formatters/JsonInputFormatter.cs @@ -28,8 +28,8 @@ namespace Microsoft.AspNet.Mvc SupportedEncodings.Add(UTF8EncodingWithoutBOM); SupportedEncodings.Add(UTF16EncodingLittleEndian); - SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("application/json")); - SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("text/json")); + SupportedMediaTypes.Add(MediaTypeHeaderValues.ApplicationJson); + SupportedMediaTypes.Add(MediaTypeHeaderValues.TextJson); } /// diff --git a/src/Microsoft.AspNet.Mvc.Extensions/Formatters/JsonOutputFormatter.cs b/src/Microsoft.AspNet.Mvc.Extensions/Formatters/JsonOutputFormatter.cs index 5c6638874f..352b7fa091 100644 --- a/src/Microsoft.AspNet.Mvc.Extensions/Formatters/JsonOutputFormatter.cs +++ b/src/Microsoft.AspNet.Mvc.Extensions/Formatters/JsonOutputFormatter.cs @@ -29,8 +29,8 @@ namespace Microsoft.AspNet.Mvc SupportedEncodings.Add(Encoding.UTF8); SupportedEncodings.Add(Encoding.Unicode); - SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("application/json")); - SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("text/json")); + SupportedMediaTypes.Add(MediaTypeHeaderValues.ApplicationJson); + SupportedMediaTypes.Add(MediaTypeHeaderValues.TextJson); } /// diff --git a/src/Microsoft.AspNet.Mvc.Extensions/Formatters/JsonPatchInputFormatter.cs b/src/Microsoft.AspNet.Mvc.Extensions/Formatters/JsonPatchInputFormatter.cs index c76b4fa941..20b6846855 100644 --- a/src/Microsoft.AspNet.Mvc.Extensions/Formatters/JsonPatchInputFormatter.cs +++ b/src/Microsoft.AspNet.Mvc.Extensions/Formatters/JsonPatchInputFormatter.cs @@ -24,7 +24,7 @@ namespace Microsoft.AspNet.Mvc // Clear all values and only include json-patch+json value. SupportedMediaTypes.Clear(); - SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("application/json-patch+json")); + SupportedMediaTypes.Add(MediaTypeHeaderValues.ApplicationJsonPatch); } /// diff --git a/src/Microsoft.AspNet.Mvc.Extensions/Formatters/MediaTypeHeaderValues.cs b/src/Microsoft.AspNet.Mvc.Extensions/Formatters/MediaTypeHeaderValues.cs new file mode 100644 index 0000000000..11b159bc6a --- /dev/null +++ b/src/Microsoft.AspNet.Mvc.Extensions/Formatters/MediaTypeHeaderValues.cs @@ -0,0 +1,19 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.Net.Http.Headers; + +namespace Microsoft.AspNet.Mvc +{ + internal class MediaTypeHeaderValues + { + public static readonly MediaTypeHeaderValue ApplicationJson + = MediaTypeHeaderValue.Parse("application/json").CopyAsReadOnly(); + + public static readonly MediaTypeHeaderValue TextJson + = MediaTypeHeaderValue.Parse("text/json").CopyAsReadOnly(); + + public static readonly MediaTypeHeaderValue ApplicationJsonPatch + = MediaTypeHeaderValue.Parse("application/json-patch+json").CopyAsReadOnly(); + } +} diff --git a/src/Microsoft.AspNet.Mvc.Extensions/JsonResult.cs b/src/Microsoft.AspNet.Mvc.Extensions/JsonResult.cs index a3874dc2c4..cf731d0481 100644 --- a/src/Microsoft.AspNet.Mvc.Extensions/JsonResult.cs +++ b/src/Microsoft.AspNet.Mvc.Extensions/JsonResult.cs @@ -73,9 +73,8 @@ namespace Microsoft.AspNet.Mvc { if (contentTypeHeader.Encoding == null) { - // 1. Do not modify the user supplied content type - // 2. Parse here to handle parameters apart from charset - contentTypeHeader = MediaTypeHeaderValue.Parse(contentTypeHeader.ToString()); + // Do not modify the user supplied content type, so copy it instead + contentTypeHeader = contentTypeHeader.Copy(); contentTypeHeader.Encoding = Encoding.UTF8; } } diff --git a/src/Microsoft.AspNet.Mvc.Extensions/ViewExecutor.cs b/src/Microsoft.AspNet.Mvc.Extensions/ViewExecutor.cs index 0d49862598..d69b48d854 100644 --- a/src/Microsoft.AspNet.Mvc.Extensions/ViewExecutor.cs +++ b/src/Microsoft.AspNet.Mvc.Extensions/ViewExecutor.cs @@ -48,9 +48,8 @@ namespace Microsoft.AspNet.Mvc { if (contentTypeHeader.Encoding == null) { - // 1. Do not modify the user supplied content type - // 2. Parse here to handle parameters apart from charset - contentTypeHeader = MediaTypeHeaderValue.Parse(contentTypeHeader.ToString()); + // Do not modify the user supplied content type, so copy it instead + contentTypeHeader = contentTypeHeader.Copy(); contentTypeHeader.Encoding = Encoding.UTF8; encoding = Encoding.UTF8; diff --git a/src/Microsoft.AspNet.Mvc.Xml/MediaTypeHeaderValues.cs b/src/Microsoft.AspNet.Mvc.Xml/MediaTypeHeaderValues.cs new file mode 100644 index 0000000000..b922599f6e --- /dev/null +++ b/src/Microsoft.AspNet.Mvc.Xml/MediaTypeHeaderValues.cs @@ -0,0 +1,16 @@ +// Copyright (c) .NET Foundation. All rights reserved. +// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. + +using Microsoft.Net.Http.Headers; + +namespace Microsoft.AspNet.Mvc.Xml +{ + internal static class MediaTypeHeaderValues + { + public static readonly MediaTypeHeaderValue ApplicationXml + = MediaTypeHeaderValue.Parse("application/xml").CopyAsReadOnly(); + + public static readonly MediaTypeHeaderValue TextXml + = MediaTypeHeaderValue.Parse("text/xml").CopyAsReadOnly(); + } +} diff --git a/src/Microsoft.AspNet.Mvc.Xml/XmlDataContractSerializerInputFormatter.cs b/src/Microsoft.AspNet.Mvc.Xml/XmlDataContractSerializerInputFormatter.cs index d24496f4ac..c999d3e076 100644 --- a/src/Microsoft.AspNet.Mvc.Xml/XmlDataContractSerializerInputFormatter.cs +++ b/src/Microsoft.AspNet.Mvc.Xml/XmlDataContractSerializerInputFormatter.cs @@ -33,8 +33,8 @@ namespace Microsoft.AspNet.Mvc.Xml SupportedEncodings.Add(UTF8EncodingWithoutBOM); SupportedEncodings.Add(UTF16EncodingLittleEndian); - SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("application/xml")); - SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("text/xml")); + SupportedMediaTypes.Add(MediaTypeHeaderValues.ApplicationXml); + SupportedMediaTypes.Add(MediaTypeHeaderValues.TextXml); _serializerSettings = new DataContractSerializerSettings(); diff --git a/src/Microsoft.AspNet.Mvc.Xml/XmlDataContractSerializerOutputFormatter.cs b/src/Microsoft.AspNet.Mvc.Xml/XmlDataContractSerializerOutputFormatter.cs index a8f3c699eb..670bbb602c 100644 --- a/src/Microsoft.AspNet.Mvc.Xml/XmlDataContractSerializerOutputFormatter.cs +++ b/src/Microsoft.AspNet.Mvc.Xml/XmlDataContractSerializerOutputFormatter.cs @@ -41,8 +41,8 @@ namespace Microsoft.AspNet.Mvc.Xml SupportedEncodings.Add(Encoding.UTF8); SupportedEncodings.Add(Encoding.Unicode); - SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("application/xml")); - SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("text/xml")); + SupportedMediaTypes.Add(MediaTypeHeaderValues.ApplicationXml); + SupportedMediaTypes.Add(MediaTypeHeaderValues.TextXml); WriterSettings = writerSettings; diff --git a/src/Microsoft.AspNet.Mvc.Xml/XmlSerializerInputFormatter.cs b/src/Microsoft.AspNet.Mvc.Xml/XmlSerializerInputFormatter.cs index a175845b6d..d85735f65a 100644 --- a/src/Microsoft.AspNet.Mvc.Xml/XmlSerializerInputFormatter.cs +++ b/src/Microsoft.AspNet.Mvc.Xml/XmlSerializerInputFormatter.cs @@ -32,8 +32,8 @@ namespace Microsoft.AspNet.Mvc.Xml SupportedEncodings.Add(UTF8EncodingWithoutBOM); SupportedEncodings.Add(UTF16EncodingLittleEndian); - SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("application/xml")); - SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("text/xml")); + SupportedMediaTypes.Add(MediaTypeHeaderValues.ApplicationXml); + SupportedMediaTypes.Add(MediaTypeHeaderValues.TextXml); WrapperProviderFactories = new List(); WrapperProviderFactories.Add(new SerializableErrorWrapperProviderFactory()); diff --git a/src/Microsoft.AspNet.Mvc.Xml/XmlSerializerOutputFormatter.cs b/src/Microsoft.AspNet.Mvc.Xml/XmlSerializerOutputFormatter.cs index d76e70173b..bf207aa4ab 100644 --- a/src/Microsoft.AspNet.Mvc.Xml/XmlSerializerOutputFormatter.cs +++ b/src/Microsoft.AspNet.Mvc.Xml/XmlSerializerOutputFormatter.cs @@ -40,8 +40,8 @@ namespace Microsoft.AspNet.Mvc.Xml SupportedEncodings.Add(Encoding.UTF8); SupportedEncodings.Add(Encoding.Unicode); - SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("application/xml")); - SupportedMediaTypes.Add(MediaTypeHeaderValue.Parse("text/xml")); + SupportedMediaTypes.Add(MediaTypeHeaderValues.ApplicationXml); + SupportedMediaTypes.Add(MediaTypeHeaderValues.TextXml); WriterSettings = writerSettings;