0

I have a resource manager class for web api project. Like this :

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); } }


}

I want to set resourceCulture in every request. How can i do this with most generic way ?

 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);
    }

This did not work.

By the way, I dont want to use action filters if i dont have to.

Thanks.

cod3r
  • 21
  • 1
  • 6

1 Answers1

0

I think you can use delegating handler before processing of request. You can find 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;
    }
}
Andrey Nikolaev
  • 368
  • 3
  • 9