11

多言語をサポートするために独自のフィルタ属性を作成しようとしています。 アイデアは簡単です。 URLは言語を表します。は、いくつかのインターフェイスを実装する必要があることを示していますが、すでに完了しています。

  • *のhttp://host.ext/ アン/rest_of_the_url *英語で開き、
  • *のhttp://host.ext/ HY/rest_of_the_url *アルメニア語で開きます。

問題は、実行時にそれがMultilingualActionFilterAttributeここ

はエラーテキストがあると言うことで、「与えられたフィルタインスタンスは、以下のフィルタの1つ以上のインタフェースを実装する必要があります。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); 
     } 
    } 
} 
+0

。これはまったく新しいMVC4サイトかMVC3からアップグレードされたサイトですか?それは、DLLのバージョンの問題かもしれません - 一時的なASP.NETファイルを削除しようとしましたか? – levelnis

+0

ウェブAPIを使用していますか? –

答えて

3

問題はMVC 5に更新されたため、更新する必要がありましたweb.configファイルもあります。 ルックhereをご覧ください。

+0

リンクが死んでいるので、何をしなければならないか教えてください。 –

+1

リンクが死んでいない。再度確認してください。 – TIKSN

24

は、Web APIを使用しているならば、問題はIActionFilterが両方System.Web.Http.FiltersSystem.Web.Mvc名前空間で定義されているように、誤ったインターフェイスを実装するので起こるかもしれません。

+1

いいえ、「使用中」はありません。私はSystem.Web.Mvc.ActionFilterAttributeクラスを実装しています。このクラスはSystem.Web.Mvc.IActionFilterインターフェイスを実装しています。 – TIKSN

+7

Web APIフィルタは、GlobalConfiguration.Configuration.Filtersを使用して登録されます。詳細については、[this](http://forums.asp.net/t/1835666.aspx)を参照してください。 –

+0

@ FlorinDumitrescuのコメントがここに正解です。 –

2

この1つは動作します:

は、フィルタ設定ファイルの代わりにwebApiconfigにあなたのフィルタを追加してください。 A.マレーから

:すべてがOKに見えること

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

関連する問題