在控制器初始化Web API之前执行一些操作(设置语言)

时间:2014-06-09 12:39:04

标签: c# .net asp.net-web-api globalization asp.net-web-api2

我想在Language (进行国际化全球化)中将controller设置为Web API

我正在编写一个名为SetLanguage的属性并用它装饰我的web-api controller

类似的东西,

[SetLanguage]
public ServiceRequestController : ApiController

但问题是:

public class SetAcceptLanguageHeader : Attribute, IControllerConfiguration
    {
        public void Initialize(HttpControllerSettings controllerSettings, HttpControllerDescriptor controllerDescriptor)
        {
            if (controllerSettings.Request.Headers.AcceptLanguage != null && controllerContext.Request.Headers.AcceptLanguage.Count > 0)
            {
                var culture = new CultureInfo(controllerContext.Request.Headers.AcceptLanguage.First().Value);
                Thread.CurrentThread.CurrentCulture = culture;
                Thread.CurrentThread.CurrentUICulture = culture;
            }
        }
    }

但是,我无法执行此操作,因为我无法从Request访问controllerSettings

(虽然我知道使用BaseController并重写Initialize方法来实现相同的想法,但我正在尝试使用此[SetLanguage]属性。)

任何想法如何?

1 个答案:

答案 0 :(得分:2)

您可以尝试使用

等操作过滤器
public class SetLanguageAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        //Use actionContext.Request to access your request
    }
}

然后可以使用[SetLanguage]属性来设置动作方法,该属性可以根据需要将其设置为文化。