c# - 在 Web API 中 Controller 初始化之前执行一些操作(设置语言)

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

我正在尝试在 Web API (执行国际化全局化)中将 Language 设置为我的 controller

我正在编写一个名为 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;
            }
        }
    }

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

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

有什么想法吗?

最佳答案

您可以尝试使用像这样的 Action 过滤器

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

这可以用来装饰具有 [SetLanguage] 属性的操作方法,该属性可以根据需要将其设置为文化。

关于c# - 在 Web API 中 Controller 初始化之前执行一些操作(设置语言),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24120499/

相关文章:

c# 清除列表与将新列表分配给现有变量

c# - 处理 MVVM 中的周期性线程

.net - Mono 上的 MEF 无法正常工作?

asp.net - 您可以在 .NET WebApi Route URI 中使用正则表达式进行 API 版本控制吗

c# - 在 web api 中捕获异常 - 我应该使用 try-catch 语句吗?

c# - 在 C# 中限制泛型的类型参数

c# - 如何在 C# 中获取 SharePoint 术语的所有子术语?

sql - 查找表实现 - 一个表或单独的表

c# - Linq 聚合累积的 bool 值

c# - 在 POST 参数中接收空值