From 10336effe7ce5e685749df5f7c17b9da44d75520 Mon Sep 17 00:00:00 2001 From: Ben Adams Date: Wed, 21 Mar 2018 18:49:38 +0000 Subject: [PATCH] React to StringValues --- .../ModelBinding/ValueProviderResult.cs | 4 ++-- .../ModelBinding/Binders/HeaderModelBinder.cs | 18 +++++++++--------- .../ModelBinding/ValueProviderResultTest.cs | 4 ++-- 3 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/ValueProviderResult.cs b/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/ValueProviderResult.cs index c9bf19ad4c..ded7d9af83 100644 --- a/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/ValueProviderResult.cs +++ b/src/Microsoft.AspNetCore.Mvc.Abstractions/ModelBinding/ValueProviderResult.cs @@ -32,7 +32,7 @@ public struct ValueProviderResult : IEquatable, IEnumerable /// /// A that represents a lack of data. /// - public static ValueProviderResult None = new ValueProviderResult(new string[0]); + public static ValueProviderResult None = new ValueProviderResult(default); /// /// Creates a new using . @@ -73,7 +73,7 @@ public string FirstValue { get { - if (Values.Count == 0) + if (Values.IsNull) { return null; } diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/HeaderModelBinder.cs b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/HeaderModelBinder.cs index 48c3ae2304..9cdc8e7240 100644 --- a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/HeaderModelBinder.cs +++ b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/Binders/HeaderModelBinder.cs @@ -2,7 +2,6 @@ // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; -using System.Diagnostics; using System.Globalization; using System.Threading.Tasks; using Microsoft.AspNetCore.Http; @@ -10,6 +9,7 @@ using Microsoft.AspNetCore.Mvc.ModelBinding.Internal; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; +using Microsoft.Extensions.Primitives; namespace Microsoft.AspNetCore.Mvc.ModelBinding.Binders { @@ -128,16 +128,18 @@ private HeaderValueProvider GetHeaderValueProvider(string headerName, ModelBindi // Prevent breaking existing users in scenarios where they are binding to a 'string' property // and expect the whole comma separated string, if any, as a single string and not as a string array. - var values = Array.Empty(); + var values = default(StringValues); if (request.Headers.ContainsKey(headerName)) { if (bindingContext.ModelMetadata.IsEnumerableType) { + // Convert to multiple values values = request.Headers.GetCommaSeparatedValues(headerName); } else { - values = new[] { (string)request.Headers[headerName] }; + // Convert to single value + values = (string)request.Headers[headerName]; } } @@ -212,23 +214,21 @@ private static object GetCompatibleCollection(ModelBindingContext bindingContext private class HeaderValueProvider : IValueProvider { - private readonly string[] _values; + private readonly StringValues _values; - public HeaderValueProvider(string[] values) + public HeaderValueProvider(StringValues values) { - Debug.Assert(values != null); - _values = values; } public bool ContainsPrefix(string prefix) { - return _values.Length != 0; + return !_values.IsNull; } public ValueProviderResult GetValue(string key) { - if (_values.Length == 0) + if (_values.IsNull) { return ValueProviderResult.None; } diff --git a/test/Microsoft.AspNetCore.Mvc.Abstractions.Test/ModelBinding/ValueProviderResultTest.cs b/test/Microsoft.AspNetCore.Mvc.Abstractions.Test/ModelBinding/ValueProviderResultTest.cs index dd639bc564..0ccc285ca2 100644 --- a/test/Microsoft.AspNetCore.Mvc.Abstractions.Test/ModelBinding/ValueProviderResultTest.cs +++ b/test/Microsoft.AspNetCore.Mvc.Abstractions.Test/ModelBinding/ValueProviderResultTest.cs @@ -20,7 +20,7 @@ public void Construct_With_NullString() Assert.Null(result.FirstValue); Assert.Equal(ValueProviderResult.None, result); Assert.Null((string)result); - Assert.Null((string[])result); + Assert.Empty((string[])result); } [Fact] @@ -35,7 +35,7 @@ public void Construct_With_NullArray() Assert.Null(result.FirstValue); Assert.Equal(ValueProviderResult.None, result); Assert.Null((string)result); - Assert.Null((string[])result); + Assert.Empty((string[])result); } [Fact]