11

多言語性をサポートするために、独自のフィルター属性を作成しようとしています。アイデアは単純です。URLは言語を表します。

  • * http://host.ext/ en /rest_of_the_url*は英語で開きます
  • * http://host.ext/ hy /rest_of_the_url*はアルメニア語で開きます。

問題は、実行時にMultilingualActionFilterAttributeと表示されることです

エラーテキストは次のとおりです。「指定されたフィルターインスタンスは、IAuthorizationFilter、IActionFilter、IResultFilter、IExceptionFilterの1つ以上のフィルターインターフェイスを実装する必要があります。」

ここでは、グローバルフィルターとして使用しています。

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

3 に答える 3

26

Web APIを使用している場合は、名前空間と名前空間IActionFilterの両方で定義されているように、間違ったインターフェイスを実装しているために問題が発生する可能性があります。System.Web.Http.FiltersSystem.Web.Mvc

于 2012-12-04T19:31:14.170 に答える
3

問題は、MVC 5に更新したため、web.configファイルも更新する必要があったことです。ここを見てください。

于 2013-12-22T16:36:37.213 に答える
2

これは機能します:

フィルタ設定ファイルではなく、webApiconfigにフィルタを追加してください。

A.マレーから:

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

于 2016-06-13T11:34:50.887 に答える