私はこれらのページのいくつかのページとパブリックハンドル(別名、エイリアス)を開発しなければなりません。コントローラアクションメソッドから新しいルートを登録するには?
(このアイデアを得るには、Facebookのエイリアスを持っていて、最後のURLはfacebook/somelongpieceofsomestuff
ではなくfacebook/alias
のようになります)。
パブリックハンドルをdbテーブルに格納し、すべてのハンドルが一意であることを確認します。 は、今私は私のハンドルのルーティング登録を追加しました:
だから、public override void RegisterArea(AreaRegistrationContext context)
{
// Assume, that I already have dictionary of handles and ids for them
foreach(var pair in publicHandlesDictionary)
{
var encId = SomeHelper.Encrypt(pair.Key);
context.MapRoute(pair.Value, pair.Value,
new {controller = "MyController", action="Index", id = encId});
}
}
、今私は、アドレスhttp://example.com/alias1
代わりのhttp://example.com/MyController/Index&id=someLongEncryptedId
を使用して、いくつかのページに到達することができます。 これはうまく動作します。
しかし、私がアプリを起動したら、新しいハンドルを追加するとどうなりますか?この新しいハンドルは登録されません。アプリの起動時にすべてのルート登録が実行されるからです。基本的には、新しいハンドルを含めてすべてのルートを再度登録するには、アプリケーション(IIS、VS/IIS Express、Azureは関係ありません)を再起動する必要があります。
コントローラのアクションメソッド(新しいハンドルが追加されたとき)から新しいルート登録を追加する方法はありますか?
をピックアップするこの方法はそうエイリアスロジック
に従うべきかを決定するために
IRouteConstraint
を使用しています。どうもありがとうございました!))) –