我正在尝试在Azure函数中全面实施特定的区域性(EN-US
为此,我有一个基类
public class MyFunction
{
protected void EnforceCulture(string culture = Cultures.UK)
{
CultureInfo.CurrentCulture.ClearCachedData();
Thread.CurrentThread.CurrentCulture = new CultureInfo(culture, false);
CultureInfo.CurrentCulture = Thread.CurrentThread.CurrentCulture;
CultureInfo.DefaultThreadCurrentCulture = Thread.CurrentThread.CurrentCulture;
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture;
CultureInfo.CurrentUICulture = Thread.CurrentThread.CurrentUICulture;
CultureInfo.DefaultThreadCurrentUICulture = Thread.CurrentThread.CurrentUICulture;
}
protected async Task<IActionResult> ExecuteWithAuthorization(HttpRequest req, Func<Task<IActionResult>> func)
{
if (req.Unauthorized())
{
return new UnauthorizedResult();
}
//Request is authorized so enforce culture and call logic
EnforceCulture(Cultures.USA);
return await func();
}
}我通过下面的逻辑在我的函数中使用它
[FunctionName("my-function")]
[Authorize]
public async Task<IActionResult> MyFunctionAsync(
[HttpTrigger(AuthorizationLevel.Anonymous, "post", Route = "my-route")]
HttpRequest req)
{
var response = await ExecuteWithAuthorization(req, async () =>
{
var result = new MyResult()
{
Test = DateTime.Now.ToString("G");
}
var okResult = (IActionResult)new OkObjectResult(result);
return okResult;
});
return response;
}当我查看result.Test时,我希望它将日期显示为美国日期,因为我强制将文化设置为美国,但它显示为英国
我做错了什么?
我认为问题可能是await操作在它自己的线程上运行,它的信息(即区域性)可能不是从主线程派生的。如果是这种情况,我该如何解决这个问题呢?
保罗
发布于 2021-08-04 12:13:11
Azure函数不会提供更改区域性的内置方法,需要将以下代码放入starting of the function中
using System.Threading;
using System.Globalization;
//......
string culture = "en-US";
CultureInfo CI = new CultureInfo(culture);
Thread.CurrentThread.CurrentUICulture = CI;对于Azure函数,你可以在应用程序设置中设置time zone:
WEBSITE_TIME_ZONE=America对于需要使用以下代码创建启动类的函数
[assembly: FunctionsStartup(typeof(Startup))]
namespace FunctionApp
{
public class Startup : IWebJobsStartup
{
public void Configure(IWebJobsBuilder app)
{
var cultureInfo = new CultureInfo("en-US");
CultureInfo.DefaultThreadCurrentCulture = cultureInfo;
CultureInfo.DefaultThreadCurrentUICulture = cultureInfo;
Thread.CurrentThread.CurrentCulture = cultureInfo;
Thread.CurrentThread.CurrentUICulture = cultureInfo;
}
}
}有关进一步的参考信息,请查看SO
https://stackoverflow.com/questions/68497823
复制相似问题