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

3

11

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);
        }
    }
}
Narcisanarcissism answered 4/12, 2012 at 19:7 Comment(1)
That all looks OK. Is this a brand new MVC4 site or one upgraded from MVC3? It could be a dll version issue - have you tried deleting your temporary ASP.NET files?Machzor
N
3

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

Narcisanarcissism answered 22/12, 2013 at 16:36 Comment(2)
Since the link is dead, could you please tell me what you had to do?Weird
Link is not dead. Please check it again.Narcisanarcissism
L
26

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.

Lustrate answered 4/12, 2012 at 19:31 Comment(2)
No, there are not any 'using'-s. I have implemented System.Web.Mvc.ActionFilterAttribute class, which itself implements System.Web.Mvc.IActionFilter interface.Narcisanarcissism
Web API filters are registered using GlobalConfiguration.Configuration.Filters. Check this for more info.Embryologist
N
3

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

Narcisanarcissism answered 22/12, 2013 at 16:36 Comment(2)
Since the link is dead, could you please tell me what you had to do?Weird
Link is not dead. Please check it again.Narcisanarcissism
C
2

This one works:

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

From A. Murray:

https://mcmap.net/q/1013681/-error-on-run-with-simple-actionfilterattribute

Coarsen answered 13/6, 2016 at 11:34 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.