Web Api 2:如何在每个请求中设置资源管理器文化?

时间:2018-02-05 08:43:39

标签: c# asp.net-web-api2 asp.net-apicontroller resourcemanager

我有一个用于web api项目的资源管理器类。像这样:

public static class MyResource
{
    private static global::System.Globalization.CultureInfo resourceCulture;
    public static global::System.Globalization.CultureInfo Culture
    {
        get
        {
            return resourceCulture;
        }
        set
        {
            resourceCulture = value;
        }
    }

    public static string RecordAdded { get { return Content.ResourceManager.GetString("RecordAdded", resourceCulture); } }


}

我想在每个请求中设置resourceCulture。我怎样才能以最通用的方式做到这一点?

 public class BaseApiController : ApiController
{

    protected override void Initialize(System.Web.Http.Controllers.HttpControllerContext controllerContext)
    {
        IEnumerable<string> lang;
        controllerContext.Request.Headers.TryGetValues("lang", out lang);
        MyResource.Culture = new System.Globalization.CultureInfo(lang.FirstOrDefault());

        base.Initialize(controllerContext);           
    }

}

protected override void Initialize(System.Web.Http.Controllers.HttpControllerContext controllerContext)
    {
        base.Initialize(controllerContext);
    }

这不起作用。

顺便说一下,如果我不需要,我不想使用动作过滤器。

感谢。

1 个答案:

答案 0 :(得分:0)

我认为您可以在处理请求之前使用委托处理程序。您可以找到docs here

public class MessageHandler1 : DelegatingHandler
{
    protected async override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    {
        IEnumerable<string> lang;
        request.Headers.TryGetValues("lang", out lang);
        MyResource.Culture = new System.Globalization.CultureInfo(lang.FirstOrDefault());
        var response = await base.SendAsync(request, cancellationToken);
        return response;
    }
}