Подтвердить что ты не робот

В MVC4 показывает и ошибка, что я должен реализовать некоторый интерфейс, но я уже сделал это

Я пытаюсь создать собственный атрибут фильтра, чтобы поддерживать многоязычность. Идея проста. URL-адрес означает язык.

  • * http://host.ext/ ru/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);
        }
    }
}
4b9b3361

Ответ 1

Проблема заключалась в том, что я обновился до MVC 5, поэтому мне также пришлось обновлять файлы web.config. Посмотрите здесь.

Ответ 2

если вы используете веб-api, тогда проблема может возникнуть из-за внедрения неправильного интерфейса, поскольку IActionFilter определяется как в пространствах имен System.Web.Http.Filters, так и System.Web.Mvc.

Ответ 3

Это работает:

Пожалуйста, добавьте свой фильтр в webApiconfig вместо файла конфигурации фильтра.

От А. Мюррея:

fooobar.com/info/177758/...