多言語をサポートするために独自のフィルタ属性を作成しようとしています。 アイデアは簡単です。 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);
}
}
}
。これはまったく新しいMVC4サイトかMVC3からアップグレードされたサイトですか?それは、DLLのバージョンの問題かもしれません - 一時的なASP.NETファイルを削除しようとしましたか? – levelnis
ウェブAPIを使用していますか? –