我正在尝试在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] Attribute`)

有什么想法吗?

最佳答案

您可以尝试使用动作过滤器,例如

public class SetLanguageAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(HttpActionContext actionContext)
    {
        //Use actionContext.Request to access your request
    }
}


然后可以使用[SetLanguage]属性来装饰操作方法,该属性可以根据需要设置为区域性。

08-26 15:14