11

Próbuję stworzyć własny atrybut filtru w celu wspierania wielojęzyczności. Pomysł jest prosty. URL oznacza język.w MVC4 pokazuje i błąd, że muszę zaimplementować jakiś interfejs, ale już go zrobiłem

  • * http: //host.ext/ PL/rest_of_the_url * otworzy się w języku angielskim i
  • * http: //host.ext/ hy/rest_of_the_url * otworzy się w Armenii.

Problem polega na tym, że w perspektywie mówi, że MultilingualActionFilterAttribute

Oto tekst błędu „Podany przykład filtr musi implementować jeden lub więcej z następujących interfejsów filtrów. IAuthorizationFilter, IActionFilter, IResultFilter, IExceptionFilter”

Tutaj używam go jako filtra globalnego.

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

Oto jestem definiowania go.

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

To wszystko wygląda OK. Czy jest to zupełnie nowa witryna MVC4, czy też zmodernizowana z MVC3? Może to być problem z wersją biblioteki DLL - czy próbowałeś usunąć tymczasowe pliki ASP.NET? – levelnis

+0

używasz aplikacji webowej? –

Odpowiedz

3

Problem polegał na tym, że zaktualizowałem do wersji MVC 5, więc musiałem również zaktualizować pliki web.config. Sprawdzić here.

+0

Ponieważ link nie działa, czy możesz mi powiedzieć, co musisz zrobić? –

+1

Link nie jest martwy. Sprawdź to jeszcze raz. – TIKSN

24

jeśli używasz Web API, to problem może się zdarzyć z powodu niewłaściwego wykonania interfejsu, jak IActionFilter jest zdefiniowana w obu System.Web.Http.Filters i System.Web.Mvc nazw.

+1

Nie, nie ma żadnych "używanych". Zaimplementowałem klasę System.Web.Mvc.ActionFilterAttribute, która sama implementuje interfejs System.Web.Mvc.IActionFilter. – TIKSN

+7

Filtry Web API są rejestrowane za pomocą pliku GlobalConfiguration.Configuration.Filters. Sprawdź [to] (http://forums.asp.net/t/1835666.aspx), aby uzyskać więcej informacji. –

+0

@ Komentarz FlorinDumitrescu jest poprawną odpowiedzią tutaj. –

Powiązane problemy