如何在C#中将当前区域性发送到我的Grpc服务器?

时间:2019-10-15 20:54:50

标签: c# grpc

使用dotnetcore3在c#项目中将当前的文化从Grpc Client发送到Grpc Server的最佳实践是什么?

2 个答案:

答案 0 :(得分:0)

了解有关CultureInfo的信息。此类包含一个名为Name的字符串属性。通常,您只需要执行CultureInfo.CurrentCulture即可访问当前上下文。

您还可以通过在CultureInfo.CurrentCulture上设置一个值来在服务器和客户端中定义自己的区域性。

例如:

CultureInfo.CurrentCulture = new CultureInfo("en-US");

答案 1 :(得分:0)

我设法通过将文化添加到标题并使用拦截器来做到这一点:

<div class="container">
  <h1>Is it morning, afternoon, evening, or night?</h1>
</div>

在您的 Startup.cs 中:

public class ThreadCultureInterceptor : Interceptor
{
    public override async Task<TResponse> UnaryServerHandler<TRequest, TResponse>(
        TRequest request,
        ServerCallContext context,
        UnaryServerMethod<TRequest, TResponse> continuation)
    {
        var headerLanguage = context.RequestHeaders.FirstOrDefault(t => t.Key == "language");
        if (headerLanguage != null)
        {
            Thread.CurrentThread.CurrentCulture = new CultureInfo(headerLanguage.Value);
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(headerLanguage.Value);
        }

        return await continuation(request, context);
    }
}

在您的客户端应用程序上:

services.AddGrpc(options =>
{
    options.Interceptors.Add<ThreadCultureInterceptor>();
});