From b4040e75abc8aa4c13005abb83ca6f9b28d3bf7d Mon Sep 17 00:00:00 2001 From: maliming Date: Fri, 9 Jul 2021 13:07:47 +0800 Subject: [PATCH] Add QueryStringCultureReplacementContext. --- ...bpAspNetCoreMvcQueryStringCultureReplacement.cs | 9 +++++---- .../Mvc/Localization/AbpLanguagesController.cs | 7 ++++++- .../Localization/IQueryStringCultureReplacement.cs | 3 +-- .../QueryStringCultureReplacementContext.cs | 14 ++++++++++++++ 4 files changed, 26 insertions(+), 7 deletions(-) create mode 100644 framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/QueryStringCultureReplacementContext.cs diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/AbpAspNetCoreMvcQueryStringCultureReplacement.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/AbpAspNetCoreMvcQueryStringCultureReplacement.cs index 7875251f64..7f4dce5da0 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/AbpAspNetCoreMvcQueryStringCultureReplacement.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/AbpAspNetCoreMvcQueryStringCultureReplacement.cs @@ -1,24 +1,25 @@ using System; using System.Text.RegularExpressions; using System.Threading.Tasks; -using Microsoft.AspNetCore.Localization; using Volo.Abp.DependencyInjection; namespace Volo.Abp.AspNetCore.Mvc.Localization { public class AbpAspNetCoreMvcQueryStringCultureReplacement : IQueryStringCultureReplacement, ITransientDependency { - public virtual Task ReplaceAsync(string returnUrl, RequestCulture requestCulture) + public virtual Task ReplaceAsync(QueryStringCultureReplacementContext context) { + var returnUrl = context.ReturnUrl; + if (!string.IsNullOrWhiteSpace(returnUrl)) { if (returnUrl.Contains("culture=", StringComparison.OrdinalIgnoreCase)) { - returnUrl = Regex.Replace(returnUrl, "culture=[A-Za-z-]+?&", $"culture={requestCulture.Culture}&", RegexOptions.Compiled | RegexOptions.IgnoreCase); + returnUrl = Regex.Replace(returnUrl, "culture=[A-Za-z-]+?&", $"culture={context.RequestCulture.Culture}&", RegexOptions.Compiled | RegexOptions.IgnoreCase); } if (returnUrl.Contains("ui-Culture=", StringComparison.OrdinalIgnoreCase)) { - returnUrl = Regex.Replace(returnUrl, "ui-culture=[A-Za-z-]+?$", $"ui-culture={requestCulture.UICulture}",RegexOptions.Compiled | RegexOptions.IgnoreCase); + returnUrl = Regex.Replace(returnUrl, "ui-culture=[A-Za-z-]+?$", $"ui-culture={context.RequestCulture.UICulture}",RegexOptions.Compiled | RegexOptions.IgnoreCase); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/AbpLanguagesController.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/AbpLanguagesController.cs index 33bf30045c..d4d4dabe71 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/AbpLanguagesController.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/AbpLanguagesController.cs @@ -33,7 +33,12 @@ namespace Volo.Abp.AspNetCore.Mvc.Localization new RequestCulture(culture, uiCulture) ); - returnUrl = await QueryStringCultureReplacement.ReplaceAsync(returnUrl, new RequestCulture(culture, uiCulture)); + returnUrl = await QueryStringCultureReplacement.ReplaceAsync(new QueryStringCultureReplacementContext() + { + HttpContext = HttpContext, + RequestCulture = new RequestCulture(culture, uiCulture), + ReturnUrl = returnUrl + }); if (!string.IsNullOrWhiteSpace(returnUrl)) { diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/IQueryStringCultureReplacement.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/IQueryStringCultureReplacement.cs index b08287be19..2635852a6c 100644 --- a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/IQueryStringCultureReplacement.cs +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/IQueryStringCultureReplacement.cs @@ -1,10 +1,9 @@ using System.Threading.Tasks; -using Microsoft.AspNetCore.Localization; namespace Volo.Abp.AspNetCore.Mvc.Localization { public interface IQueryStringCultureReplacement { - Task ReplaceAsync(string returnUrl, RequestCulture requestCulture); + Task ReplaceAsync(QueryStringCultureReplacementContext context); } } diff --git a/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/QueryStringCultureReplacementContext.cs b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/QueryStringCultureReplacementContext.cs new file mode 100644 index 0000000000..b537cf2baf --- /dev/null +++ b/framework/src/Volo.Abp.AspNetCore.Mvc/Volo/Abp/AspNetCore/Mvc/Localization/QueryStringCultureReplacementContext.cs @@ -0,0 +1,14 @@ +using Microsoft.AspNetCore.Http; +using Microsoft.AspNetCore.Localization; + +namespace Volo.Abp.AspNetCore.Mvc.Localization +{ + public class QueryStringCultureReplacementContext + { + public HttpContext HttpContext { get; set; } + + public string ReturnUrl { get; set; } + + public RequestCulture RequestCulture { get; set; } + } +}