我有一个用于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);
}
这不起作用。
顺便说一下,如果我不需要,我不想使用动作过滤器。
感谢。
答案 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;
}
}