Ответ 1
Проблема заключалась в том, что я обновился до MVC 5, поэтому мне также пришлось обновлять файлы web.config. Посмотрите здесь.
Я пытаюсь создать собственный атрибут фильтра, чтобы поддерживать многоязычность. Идея проста. 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);
}
}
}
Проблема заключалась в том, что я обновился до MVC 5, поэтому мне также пришлось обновлять файлы web.config. Посмотрите здесь.
если вы используете веб-api, тогда проблема может возникнуть из-за внедрения неправильного интерфейса, поскольку IActionFilter
определяется как в пространствах имен System.Web.Http.Filters
, так и System.Web.Mvc
.
Это работает:
Пожалуйста, добавьте свой фильтр в webApiconfig вместо файла конфигурации фильтра.
От А. Мюррея: