Skip to content
This repository was archived by the owner on Dec 14, 2018. It is now read-only.
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public struct ValueProviderResult : IEquatable<ValueProviderResult>, IEnumerable
/// <summary>
/// A <see cref="ValueProviderResult"/> that represents a lack of data.
/// </summary>
public static ValueProviderResult None = new ValueProviderResult(new string[0]);
public static ValueProviderResult None = new ValueProviderResult(default);

/// <summary>
/// Creates a new <see cref="ValueProviderResult"/> using <see cref="CultureInfo.InvariantCulture"/>.
Expand Down Expand Up @@ -73,7 +73,7 @@ public string FirstValue
{
get
{
if (Values.Count == 0)
if (Values.IsNull)
{
return null;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@
// 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;
using Microsoft.AspNetCore.Mvc.Internal;
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
{
Expand Down Expand Up @@ -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<string>();
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];
}
}

Expand Down Expand Up @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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]
Expand All @@ -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]
Expand Down