diff --git a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/UrlBuilder.cs b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/UrlBuilder.cs index 5bee246bd0..4d77423c7f 100644 --- a/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/UrlBuilder.cs +++ b/framework/src/Volo.Abp.Http.Client/Volo/Abp/Http/Client/DynamicProxying/UrlBuilder.cs @@ -15,12 +15,18 @@ namespace Volo.Abp.Http.Client.DynamicProxying { public static string GenerateUrlWithParameters(ActionApiDescriptionModel action, IReadOnlyDictionary methodArguments, ApiVersionInfo apiVersion) { - var urlBuilder = new StringBuilder(action.Url); + // The ASP.NET Core route value provider and query string value provider: + // Treat values as invariant culture. + // Expect that URLs are culture-invariant. + using (CultureHelper.Use(CultureInfo.InvariantCulture)) + { + var urlBuilder = new StringBuilder(action.Url); - ReplacePathVariables(urlBuilder, action.Parameters, methodArguments, apiVersion); - AddQueryStringParameters(urlBuilder, action.Parameters, methodArguments, apiVersion); + ReplacePathVariables(urlBuilder, action.Parameters, methodArguments, apiVersion); + AddQueryStringParameters(urlBuilder, action.Parameters, methodArguments, apiVersion); - return urlBuilder.ToString(); + return urlBuilder.ToString(); + } } private static void ReplacePathVariables(StringBuilder urlBuilder, IList actionParameters, IReadOnlyDictionary methodArguments, ApiVersionInfo apiVersion) @@ -128,15 +134,12 @@ namespace Volo.Abp.Http.Client.DynamicProxying private static string ConvertValueToString([NotNull] object value) { - using (CultureHelper.Use(CultureInfo.InvariantCulture)) + if (value is DateTime dateTimeValue) { - if (value is DateTime dateTimeValue) - { - return dateTimeValue.ToUniversalTime().ToString("u"); - } - - return value.ToString(); + return dateTimeValue.ToUniversalTime().ToString("O"); } + + return value.ToString(); } } } diff --git a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/ProxyScriptingHelper.cs b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/ProxyScriptingHelper.cs index 700dc4e290..2568ccbb1c 100644 --- a/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/ProxyScriptingHelper.cs +++ b/framework/src/Volo.Abp.Http/Volo/Abp/Http/ProxyScripting/Generators/ProxyScriptingHelper.cs @@ -1,7 +1,9 @@ using System; using System.Collections.Generic; +using System.Globalization; using System.Linq; using Volo.Abp.Http.Modeling; +using Volo.Abp.Localization; namespace Volo.Abp.Http.ProxyScripting.Generators { @@ -11,10 +13,16 @@ namespace Volo.Abp.Http.ProxyScripting.Generators public static string GenerateUrlWithParameters(ActionApiDescriptionModel action) { - //TODO: Can be optimized using StringBuilder? - var url = ReplacePathVariables(action.Url, action.Parameters); - url = AddQueryStringParameters(url, action.Parameters); - return url; + // The ASP.NET Core route value provider and query string value provider: + // Treat values as invariant culture. + // Expect that URLs are culture-invariant. + using (CultureHelper.Use(CultureInfo.InvariantCulture)) + { + //TODO: Can be optimized using StringBuilder? + var url = ReplacePathVariables(action.Url, action.Parameters); + url = AddQueryStringParameters(url, action.Parameters); + return url; + } } public static string GenerateHeaders(ActionApiDescriptionModel action, int indent = 0)