diff --git a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/RouteValueProvider.cs b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/RouteValueProvider.cs
index eeb229e9fd..72f556c1c0 100644
--- a/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/RouteValueProvider.cs
+++ b/src/Microsoft.AspNetCore.Mvc.Core/ModelBinding/RouteValueProvider.cs
@@ -21,9 +21,21 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
///
/// The of the data.
/// The values.
+ /// Sets to .
public RouteValueProvider(
BindingSource bindingSource,
RouteValueDictionary values)
+ : this(bindingSource, values, CultureInfo.InvariantCulture)
+ {
+ }
+
+ ///
+ /// Creates a new .
+ ///
+ /// The of the data.
+ /// The values.
+ /// The culture for route value.
+ public RouteValueProvider(BindingSource bindingSource, RouteValueDictionary values, CultureInfo culture)
: base(bindingSource)
{
if (bindingSource == null)
@@ -36,7 +48,13 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
throw new ArgumentNullException(nameof(values));
}
+ if (culture == null)
+ {
+ throw new ArgumentNullException(nameof(culture));
+ }
+
_values = values;
+ Culture = culture;
}
protected PrefixContainer PrefixContainer
@@ -52,6 +70,8 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
}
}
+ protected CultureInfo Culture { get; }
+
///
public override bool ContainsPrefix(string key)
{
@@ -70,7 +90,7 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
if (_values.TryGetValue(key, out value))
{
var stringValue = value as string ?? value?.ToString() ?? string.Empty;
- return new ValueProviderResult(stringValue, CultureInfo.InvariantCulture);
+ return new ValueProviderResult(stringValue, Culture);
}
else
{
diff --git a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/RouteValueProviderTests.cs b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/RouteValueProviderTests.cs
index 8b061a8879..8c8c050ae2 100644
--- a/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/RouteValueProviderTests.cs
+++ b/test/Microsoft.AspNetCore.Mvc.Core.Test/ModelBinding/RouteValueProviderTests.cs
@@ -3,6 +3,7 @@
using System;
using System.Collections.Generic;
+using System.Globalization;
using Microsoft.AspNetCore.Routing;
using Xunit;
@@ -61,6 +62,41 @@ namespace Microsoft.AspNetCore.Mvc.ModelBinding
Assert.Equal(string.Empty, (string)result);
}
+ [Fact]
+ public void GetValue_ReturnsValue_WithDefaultCulture()
+ {
+ // Arrange
+ var values = new RouteValueDictionary(new Dictionary
+ {
+ { "test-key", "test-value"}
+ });
+ var provider = new RouteValueProvider(BindingSource.Query, values);
+
+ // Act
+ var result = provider.GetValue("test-key");
+
+ // Assert
+ Assert.Equal(CultureInfo.InvariantCulture, result.Culture);
+ }
+
+ [Fact]
+ public void GetValue_ReturnsValue_WithCulture()
+ {
+ // Arrange
+ var values = new RouteValueDictionary(new Dictionary
+ {
+ { "test-key", "test-value"}
+ });
+ var culture = new CultureInfo("fr-FR");
+ var provider = new RouteValueProvider(BindingSource.Query, values, culture);
+
+ // Act
+ var result = provider.GetValue("test-key");
+
+ // Assert
+ Assert.Equal(new CultureInfo("fr-FR"), result.Culture);
+ }
+
[Theory]
[InlineData("foo")]
[InlineData("bar")]