Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

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);
        }
    }
}
like image 840
TIKSN Avatar asked Dec 04 '12 19:12

TIKSN


1 Answers

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.

like image 85
Behnam Esmaili Avatar answered Oct 05 '22 23:10

Behnam Esmaili