11

Ich versuche, eigene Filterattribut zu erstellen, um Mehrsprachigkeit zu unterstützen. Die Idee ist einfach. URL steht für Sprache.in MVC4 zeigt und Fehler, dass ich einige Schnittstelle implementieren muss, aber ich bin schon fertig

  • * http: //host.ext/ en/rest_of_the_url * wird in englischer Sprache öffnen und
  • * http: //host.ext/ hy/rest_of_the_url * wird in Armenisch öffnen.

Das Problem ist, zur Lauf sagt, dass es, dass MultilingualActionFilterAttribute

Hier ist der Fehlertext „Die angegebene Filterinstanz eine oder mehrere der folgenden Filter Schnittstellen implementieren müssen. IAuthorizationFilter, IActionFilter, IResultFilter, IExceptionFilter“

Hier verwende ich es als globaler 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()); 
     } 
    } 
} 

Hier definiere ich es.

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

Das ist alles in Ordnung aussieht. Ist das eine brandneue MVC4-Site oder eine von MVC3 aufgerüstete? Es könnte ein Problem mit der DLL-Version sein - haben Sie versucht, Ihre temporären ASP.NET-Dateien zu löschen? – levelnis

+0

verwenden Sie Web API? –

Antwort

3

Das Problem war, dass ich auf MVC 5 aktualisiert, so musste ich web.config Dateien zu aktualisieren. Look here.

+0

Da die Verbindung tot ist, könntest du mir bitte sagen, was du zu tun hast? –

+1

Link ist nicht tot. Bitte überprüfen Sie es noch einmal. – TIKSN

24

, wenn Sie Web-api verwenden, dann kann das Problem passieren wegen der falschen Schnittstelle implementiert, wie IActionFilter in beiden System.Web.Http.Filters und System.Web.Mvc Namensraum definiert ist.

+1

Nein, es gibt keine 'using'-s. Ich habe die System.Web.Mvc.ActionFilterAttribute-Klasse implementiert, die ihrerseits die System.Web.Mvc.IActionFilter-Schnittstelle implementiert. – TIKSN

+7

Web-API-Filter werden mit GlobalConfiguration.Configuration.Filters registriert. Überprüfen Sie [diese] (http://forums.asp.net/t/1835666.aspx) für weitere Informationen. –

+0

@ FlorinDumitrescus Kommentar ist die richtige Antwort hier. –

Verwandte Themen