asp.net - ASP.NET WebApi 中异步调用的本地化

标签 asp.net asynchronous asp.net-web-api

嗨 - 我计划基于“Accept-Language” header ,通过基于该 header 设置 CurrentUICulture 来处理错误字符串等的服务器端本地化,但显然它不会通过异步调用,下面是一个示例代码来说明问题,是否有默认的方式来处理异步调用的本地化?

   public async Task<HttpResponseMessage> GetAsync()
    {            
        //set the current ui culture, to say "fr-FR", based on "Accept-Language" header
        Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("**fr-FR**");  

       var task = httpClient.PutAsync(endpoint, content)            

        //do some processing

        var res  = await task;

        var culture = Thread.CurrentThread.CurrentUICulture.Name; **//ITS NOT necessarily fr-FR**

        //do some more processing
        //and handle localizations etc.

        return res;
    }

我正在寻找一种更干净/无缝的方式来处理存在真正异步操作的情况下的本地化。对于await 调用之后的代码

编辑:为清楚起见,将 Task.Run() 替换为 httpClient.PutAsync

最佳答案

Task.RunTask.Factory.StartNew 没有任何上下文。这是预期的行为。当您使用 await 关键字时,上下文会被保留。因此,您可以执行以下操作:

public static async Task<IEnumerable<string>> GetAsync()
{            
    //set the current ui culture, to say "fr-FR", based on "Accept-Language" header
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("fr-FR");

    //do some processing

    var s = await GetSomething();

    var culture = Thread.CurrentThread.CurrentUICulture.Name; //It's ja-JP

    return new[] { s, s };
}

public static Task<string> GetSomething()
{
    var cuture = Thread.CurrentThread.CurrentUICulture.Name; // It's fr-FR
    var tcs = new TaskCompletionSource<string>();
    Thread.CurrentThread.CurrentUICulture = CultureInfo.GetCultureInfo("ja-JP");
    tcs.SetResult("<something>");
    return tcs.Task;
}

关于asp.net - ASP.NET WebApi 中异步调用的本地化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14099467/

相关文章:

css - 在 asp.net 中单击时将 css 类分配给链接按钮

javascript - crypto.pbkdf2 是异步的,如何将其视为同步?

java - 使用 Future 异步读取文件

c# - 异步将多个参数传递给 ReportProgress 方法

c# - 如何对 "HttpContext.Current.Request.LogonUserIdentity.Name"进行单元测试?

c# - Error consuming wsdl web service with c# 格式化程序在尝试反序列化消息时抛出异常

c# - 如何根据第一个ListView中选择的值显示第二个ListView?

c# - WebApi Controller - 发送邮件异步

c# - 验证长类型输入

asp.net - 在 Web API/APIController 中控制序列化