在MVC4节目和错误,我要实现一些接口,但我已经做到了(in MVC4 shows and erro

2019-08-03 12:28发布

我想,以支持多语言来创建自己的过滤属性。 这个想法很简单。 URL代表语言。

  • * HTTP://host.ext/ EN / 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);
        }
    }
}

Answer 1:

如果您使用的Web API则问题可能发生,因为执行错误的接口,因为IActionFilter在两个定义System.Web.Http.FiltersSystem.Web.Mvc命名空间。



Answer 2:

问题是,我更新到MVC 5,所以我不得不太更新的web.config文件。 你看这里 。



Answer 3:

这其中的工作原理:

请将您的过滤器添加到webApiconfig而不是过滤器配置文件。

从A穆雷:

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



文章来源: in MVC4 shows and error that I have to implement some Interface but I am already done it