diff --git a/samples/LocalizationSample/Startup.cs b/samples/LocalizationSample/Startup.cs
index 2e2b93bd8b..ea9fb7c6c3 100644
--- a/samples/LocalizationSample/Startup.cs
+++ b/samples/LocalizationSample/Startup.cs
@@ -35,6 +35,14 @@ namespace LocalizationSample
// new CultureInfo("en-AU")
//}
};
+
+ // Optionally create an app-specific strategy with just a delegate, e.g. look up user preference from DB.
+ // Inserting it as position 0 ensures it has priority over any of the default strategies.
+ //options.RequestCultureStrategies.Insert(0, new CustomRequestCultureStrategy(async context =>
+ //{
+
+ //}));
+
app.UseRequestLocalization(options);
app.Use(async (context, next) =>
diff --git a/src/Microsoft.AspNet.Localization/AcceptLanguageHeaderRequestCultureStrategy.cs b/src/Microsoft.AspNet.Localization/AcceptLanguageHeaderRequestCultureStrategy.cs
index dbc9883cd1..45ac85e2d3 100644
--- a/src/Microsoft.AspNet.Localization/AcceptLanguageHeaderRequestCultureStrategy.cs
+++ b/src/Microsoft.AspNet.Localization/AcceptLanguageHeaderRequestCultureStrategy.cs
@@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Linq;
+using System.Threading.Tasks;
using Microsoft.AspNet.Http;
using Microsoft.AspNet.Localization.Internal;
using Microsoft.Framework.Internal;
@@ -22,13 +23,13 @@ namespace Microsoft.AspNet.Localization
public int MaximumAcceptLanguageHeaderValuesToTry { get; set; } = 3;
///
- public override RequestCulture DetermineRequestCulture([NotNull] HttpContext httpContext)
+ public override Task DetermineRequestCulture([NotNull] HttpContext httpContext)
{
var acceptLanguageHeader = httpContext.Request.GetTypedHeaders().AcceptLanguage;
if (acceptLanguageHeader == null || acceptLanguageHeader.Count == 0)
{
- return null;
+ return Task.FromResult((RequestCulture)null);
}
var languages = acceptLanguageHeader.AsEnumerable();
@@ -58,13 +59,13 @@ namespace Microsoft.AspNet.Localization
if (requestCulture != null)
{
- return requestCulture;
+ return Task.FromResult(requestCulture);
}
}
}
}
- return null;
+ return Task.FromResult((RequestCulture)null);
}
}
}
diff --git a/src/Microsoft.AspNet.Localization/CookieRequestCultureStrategy.cs b/src/Microsoft.AspNet.Localization/CookieRequestCultureStrategy.cs
index 97c70d82ed..68e7c96d06 100644
--- a/src/Microsoft.AspNet.Localization/CookieRequestCultureStrategy.cs
+++ b/src/Microsoft.AspNet.Localization/CookieRequestCultureStrategy.cs
@@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
+using System.Threading.Tasks;
using Microsoft.AspNet.Http;
using Microsoft.AspNet.Localization.Internal;
using Microsoft.Framework.Internal;
@@ -24,20 +25,20 @@ namespace Microsoft.AspNet.Localization
public string CookieName { get; set; } = DefaultCookieName;
///
- public override RequestCulture DetermineRequestCulture([NotNull] HttpContext httpContext)
+ public override Task DetermineRequestCulture([NotNull] HttpContext httpContext)
{
var cookie = httpContext.Request.Cookies[CookieName];
if (cookie == null)
{
- return null;
+ return Task.FromResult((RequestCulture)null);
}
var requestCulture = ParseCookieValue(cookie);
requestCulture = ValidateRequestCulture(requestCulture);
- return requestCulture;
+ return Task.FromResult(requestCulture);
}
///
diff --git a/src/Microsoft.AspNet.Localization/CustomRequestCultureStrategy.cs b/src/Microsoft.AspNet.Localization/CustomRequestCultureStrategy.cs
index 5a5c87a825..65546bed44 100644
--- a/src/Microsoft.AspNet.Localization/CustomRequestCultureStrategy.cs
+++ b/src/Microsoft.AspNet.Localization/CustomRequestCultureStrategy.cs
@@ -2,6 +2,7 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
+using System.Threading.Tasks;
using Microsoft.AspNet.Http;
using Microsoft.Framework.Internal;
@@ -12,19 +13,19 @@ namespace Microsoft.AspNet.Localization
///
public class CustomRequestCultureStrategy : RequestCultureStrategy
{
- private readonly Func _strategy;
+ private readonly Func> _strategy;
///
/// Creates a new using the specified delegate.
///
/// The strategy delegate.
- public CustomRequestCultureStrategy([NotNull] Func strategy)
+ public CustomRequestCultureStrategy([NotNull] Func> strategy)
{
_strategy = strategy;
}
///
- public override RequestCulture DetermineRequestCulture([NotNull] HttpContext httpContext)
+ public override Task DetermineRequestCulture([NotNull] HttpContext httpContext)
{
return _strategy(httpContext);
}
diff --git a/src/Microsoft.AspNet.Localization/IRequestCultureStrategy.cs b/src/Microsoft.AspNet.Localization/IRequestCultureStrategy.cs
index 9e71c133f4..91001e57cc 100644
--- a/src/Microsoft.AspNet.Localization/IRequestCultureStrategy.cs
+++ b/src/Microsoft.AspNet.Localization/IRequestCultureStrategy.cs
@@ -1,6 +1,7 @@
// 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 System.Threading.Tasks;
using Microsoft.AspNet.Http;
namespace Microsoft.AspNet.Localization
@@ -18,6 +19,6 @@ namespace Microsoft.AspNet.Localization
/// The determined .
/// Returns null if the strategy couldn't determine a .
///
- RequestCulture DetermineRequestCulture(HttpContext httpContext);
+ Task DetermineRequestCulture(HttpContext httpContext);
}
}
diff --git a/src/Microsoft.AspNet.Localization/QueryStringRequestCultureStrategy.cs b/src/Microsoft.AspNet.Localization/QueryStringRequestCultureStrategy.cs
index 64a5a3b520..4a9a0b9140 100644
--- a/src/Microsoft.AspNet.Localization/QueryStringRequestCultureStrategy.cs
+++ b/src/Microsoft.AspNet.Localization/QueryStringRequestCultureStrategy.cs
@@ -1,6 +1,7 @@
// 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 System.Threading.Tasks;
using Microsoft.AspNet.Http;
using Microsoft.AspNet.Localization.Internal;
using Microsoft.Framework.Internal;
@@ -26,12 +27,12 @@ namespace Microsoft.AspNet.Localization
public string UIQueryStringKey { get; set; } = "ui-culture";
///
- public override RequestCulture DetermineRequestCulture([NotNull] HttpContext httpContext)
+ public override Task DetermineRequestCulture([NotNull] HttpContext httpContext)
{
var request = httpContext.Request;
if (!request.QueryString.HasValue)
{
- return null;
+ return Task.FromResult((RequestCulture)null);
}
string queryCulture = null;
@@ -50,7 +51,7 @@ namespace Microsoft.AspNet.Localization
if (queryCulture == null && queryUICulture == null)
{
// No values specified for either so no match
- return null;
+ return Task.FromResult((RequestCulture)null);
}
if (queryCulture != null && queryUICulture == null)
@@ -64,14 +65,14 @@ namespace Microsoft.AspNet.Localization
if (culture == null || uiCulture == null)
{
- return null;
+ return Task.FromResult((RequestCulture)null);
}
var requestCulture = new RequestCulture(culture, uiCulture);
requestCulture = ValidateRequestCulture(requestCulture);
- return requestCulture;
+ return Task.FromResult(requestCulture);
}
}
}
diff --git a/src/Microsoft.AspNet.Localization/RequestCultureStrategy.cs b/src/Microsoft.AspNet.Localization/RequestCultureStrategy.cs
index 17afbcd397..6d30805119 100644
--- a/src/Microsoft.AspNet.Localization/RequestCultureStrategy.cs
+++ b/src/Microsoft.AspNet.Localization/RequestCultureStrategy.cs
@@ -1,6 +1,7 @@
// 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 System.Threading.Tasks;
using Microsoft.AspNet.Http;
using Microsoft.Framework.Internal;
@@ -17,7 +18,7 @@ namespace Microsoft.AspNet.Localization
public RequestLocalizationOptions Options { get; set; }
///
- public abstract RequestCulture DetermineRequestCulture(HttpContext httpContext);
+ public abstract Task DetermineRequestCulture(HttpContext httpContext);
///
/// Determines if the given is valid according to the currently configured.
diff --git a/src/Microsoft.AspNet.Localization/RequestLocalizationMiddleware.cs b/src/Microsoft.AspNet.Localization/RequestLocalizationMiddleware.cs
index c640fcbb8f..54600e17a4 100644
--- a/src/Microsoft.AspNet.Localization/RequestLocalizationMiddleware.cs
+++ b/src/Microsoft.AspNet.Localization/RequestLocalizationMiddleware.cs
@@ -46,7 +46,7 @@ namespace Microsoft.AspNet.Localization
{
foreach (var strategy in _options.RequestCultureStrategies)
{
- var result = strategy.DetermineRequestCulture(context);
+ var result = await strategy.DetermineRequestCulture(context);
if (result != null)
{
requestCulture = result;