in MVC4 shows and error that I have to implement some Interface but I am already done it

﹥>﹥吖頭↗ 提交于 2019-12-06 21:21:34

问题


I am trying to create own filter attribute in order to support multilinguality. The idea is simple. URL stands for language.

  • *http://host.ext/en/rest_of_the_url* will open in English and
  • *http://host.ext/hy/rest_of_the_url* will open in Armenian.

The problem is that at run it says that MultilingualActionFilterAttribute

Here is the error text "The given filter instance must implement one or more of the following filter interfaces: IAuthorizationFilter, IActionFilter, IResultFilter, IExceptionFilter."

Here I am using it as global filter.

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());
        }
    }
}

Here I am defining it.

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);
        }
    }
}

回答1:


if you are using web api then the problem may happen because of implementing wrong interface, as IActionFilter is defined in both System.Web.Http.Filters and System.Web.Mvc namespaces.




回答2:


The problem was that I updated to MVC 5, so I had to update web.config files too. Look here.




回答3:


This one works:

Please add your filter to the webApiconfig instead of filter config file.

From A. Murray:

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



来源:https://stackoverflow.com/questions/13710131/in-mvc4-shows-and-error-that-i-have-to-implement-some-interface-but-i-am-already

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!