11

我正在尝试创建自己的过滤器属性以支持多语言。这个想法很简单。URL 代表语言。

  • *http://host.ext/ en /rest_of_the_url* 将以英文打开,并且
  • *http://host.ext/ hy /rest_of_the_url* 将以亚美尼亚语打开。

问题是在运行时它说 MultilingualActionFilterAttribute

这是错误文本“给定的过滤器实例必须实现以下一个或多个过滤器接口:IAuthorizationFilter、IActionFilter、IResultFilter、IExceptionFilter。”

在这里,我将其用作全局过滤器。

namespace TIKSN.STOZE.WebApp
{
    public class FilterConfig
    {
        public static void RegisterGlobalFilters(System.Web.Mvc.GlobalFilterCollection filters)
        {
            filters.Add(new TIKSN.STOZE.Common.MultilingualActionFilterAttribute());
            filters.Add(new System.Web.Mvc.HandleErrorAttribute());
        }
    }
}

我在这里定义它。

namespace TIKSN.STOZE.Common
{
    public class MultilingualActionFilterAttribute : System.Web.Mvc.ActionFilterAttribute
    {
        public override void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext)
        {
            string language = System.Convert.ToString(filterContext.RouteData.Values["language"]);

            System.Diagnostics.Debug.Print("Requested language is '{0}'", language);
            language = Helper.PickUpSupportedLanguage(language);
            System.Diagnostics.Debug.Print("Supported language is '{0}'", language);

            if (language == string.Empty)
            {
                filterContext.HttpContext.Response.RedirectToRoutePermanent(new { language = Common.Properties.Settings.Default.DefaultLanguageCode });
            }

            language = Helper.TryToPickUpSupportedLanguage(language);

            System.Threading.Thread.CurrentThread.CurrentCulture = System.Globalization.CultureInfo.CreateSpecificCulture(language);
            System.Threading.Thread.CurrentThread.CurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo(language);
        }
    }
}
4

3 回答 3

26

如果您使用的是 web api,那么问题可能是因为实现了错误的接口,正如在命名空间和命名空间IActionFilter中定义的那样。System.Web.Http.FiltersSystem.Web.Mvc

于 2012-12-04T19:31:14.170 回答
3

问题是我更新到 MVC 5,所以我也必须更新web.config文件。看这里

于 2013-12-22T16:36:37.213 回答
2

这个有效:

请将您的过滤器添加到 webApiconfig 而不是过滤器配置文件。

来自 A. Murray:

https://stackoverflow.com/a/32518692/4853768

于 2016-06-13T11:34:50.887 回答