11

Sto provando a creare il proprio attributo di filtro per supportare il multilinguismo. L'idea è semplice. URL sta per lingua.in MVC4 mostra ed errore che devo implementare qualche interfaccia ma l'ho già fatto

  • * http: //host.ext/ it/rest_of_the_url * si aprirà in inglese e
  • * http: //host.ext/ hy/rest_of_the_url * si aprirà in armeno.

Il problema è che in fase di esecuzione si dice che MultilingualActionFilterAttribute

Ecco il testo di errore "Il determinata istanza di filtro deve implementare una o più delle seguenti interfacce di filtro: IAuthorizationFilter, IActionFilter, IResultFilter, IExceptionFilter."

Qui lo sto usando come filtro globale.

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

Qui lo sto definendo.

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

Che tutto sembra OK. Si tratta di un nuovissimo sito MVC4 o di uno aggiornato da MVC3? Potrebbe essere un problema di versione della DLL - hai provato a cancellare i tuoi file temporanei ASP.NET? – levelnis

+0

stai usando web api? –

risposta

3

Il problema era che ho aggiornato a MVC 5, quindi ho dovuto aggiornare anche i file web.config. Look here.

+0

Poiché il collegamento è morto, potresti dirmi cosa hai dovuto fare? –

+1

Link non è morto. Si prega di controllare di nuovo. – TIKSN

24

se si utilizza API Web allora il problema può verificarsi a causa di attuazione interfaccia sbagliato, come IActionFilter è definito in entrambe le System.Web.Http.Filters e System.Web.Mvc spazi dei nomi.

+1

No, non ci sono "usi". Ho implementato la classe System.Web.Mvc.ActionFilterAttribute, che a sua volta implementa l'interfaccia System.Web.Mvc.IActionFilter. – TIKSN

+7

I filtri API Web vengono registrati utilizzando GlobalConfiguration.Configuration.Filters. Controlla [questo] (http://forums.asp.net/t/1835666.aspx) per maggiori informazioni. –

+0

@ Il commento di FlorinDumitrescu è la risposta corretta qui. –