在MVC4中显示和错误,我必须实现一些接口,但我已经完成了它
我正在尝试创建自己的filter属性,以支持多语言。 这个想法很简单。 URL代表语言。
- * http://host.ext/en/ rest_of_the_url *将以英文和
- * http://host.ext/ hy / rest_of_the_url *将以亚美尼亚语开放。
问题是在运行时它会说MultilingualActionFilterAttribute
以下是错误文本“给定的filter实例必须实现以下一个或多个filter接口:IAuthorizationFilter,IActionFilter,IResultFilter,IExceptionFilter”。
在这里,我将它用作全局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()); } } }
我在这里定义它。
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); } } }
如果您使用的是web api,则可能会因为实现错误的接口而导致问题,因为在System.Web.Http.Filters
和System.Web.Mvc
命名空间中都定义了IActionFilter
。
问题是我更新到MVC 5,所以我不得不更新web.config文件。 看这里
这个工作:
请将您的filter添加到webApiconfig而不是filter配置文件。
来自A. Murray: