ような何かを行うことができます。たとえば、翻訳をリソースファイルまたはDBに格納することができます。これを行う最も簡単な方法は、DefaultControllerFactoryを継承し、CreateController関数を上書きすることです。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace System.Web.Mvc
{
class CustomControllerFactory : DefaultControllerFactory
{
public override IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
{
/**
* here comes your code for translating the controller name
**/
return base.CreateController(requestContext, controllerName);
}
}
}
最後のステップは、アプリケーションの起動時に(Global.asaxで)コントローラファクトリの実装を登録することです。それがエラーを起こしやすいとなりますので、
namespace MyApplication
{
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
ControllerBuilder.Current.SetControllerFactory(typeof(CustomControllerFactory));
}
}
}
これは間違いなく興味深いように思えますが、残念ながらエリアやアクションなどのコントローラ名よりもURLには他の部分もあります。だから私はそれがルートレベルでおそらく最も良い解決だと思う。しかし、これは何とかここでも処理できるのでしょうか? – Runeborg
RequestContextを通じてRequestオブジェクトにアクセスできるので、必要なすべてのパラメータを操作できます。したがって、この時点で領域やアクションを翻訳することに問題はありません。 – Mato
あなたは、routedataのエリア/コントローラ/アクションを変更することを意味しますか?はい、これはルートの後に評価される場合、実際には動作します。 – Runeborg