首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在所有Azure函数调用中强制区域性不起作用

在所有Azure函数调用中强制区域性不起作用
EN

Stack Overflow用户
提问于 2021-07-23 18:34:05
回答 1查看 82关注 0票数 1

我正在尝试在Azure函数中全面实施特定的区域性(EN-US

为此,我有一个基类

代码语言:javascript
运行
复制
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();
    }
}

我通过下面的逻辑在我的函数中使用它

代码语言:javascript
运行
复制
    [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操作在它自己的线程上运行,它的信息(即区域性)可能不是从主线程派生的。如果是这种情况,我该如何解决这个问题呢?

保罗

EN

回答 1

Stack Overflow用户

发布于 2021-08-04 12:13:11

Azure函数不会提供更改区域性的内置方法,需要将以下代码放入starting of the function

代码语言:javascript
运行
复制
using System.Threading;
using System.Globalization;

//......

string culture = "en-US";
CultureInfo CI = new CultureInfo(culture);
Thread.CurrentThread.CurrentUICulture = CI;

对于Azure函数,你可以在应用程序设置中设置time zone

代码语言:javascript
运行
复制
WEBSITE_TIME_ZONE=America

对于需要使用以下代码创建启动类的函数

代码语言:javascript
运行
复制
[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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68497823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档