独自の IRouteHandler を実装し、カスタム ロジックをカスタム ControllerActionInvoker に配置することを検討します。それはどのように機能しますか?ルート テーブルは動的に変更されませんが、カスタム ControllerActionInvoker でルート パスのランダム パラメータをチェックインし、対応するアクションを呼び出すかどうかを指定できます。
私のルート:
routes.Add
(
new Route
(
"blog/comment/{*data}",
new RouteValueDictionary(new {controller = "blog", action = "comment", data = ""}),
new MyRouteHandler()
)
);
私の I ルートハンドラ:
class MyRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
return new MyHttpHandler(requestContext);
}
}`
私のハンドラ:
class MyHttpHandler : MvcHandler
{
public MyHttpHandler(RequestContext requestContext) : base(requestContext)
{
}
protected override void ProcessRequest(HttpContextBase httpContext)
{
IController controller = new BlogController();
(controller as Controller).ActionInvoker = new MyActionInvoker();
controller.Execute(RequestContext);
} }`
そして、アクションを処理するかどうかのカスタムロジックをコーディングする必要がある私のアクションivoker:
class MyActionInvoker : ControllerActionInvoker
{
protected override ActionResult InvokeActionMethod(MethodInfo methodInfo, IDictionary<string, object> parameters)
{
var data = ControllerContext.RouteData.GetRequiredString("data");
// put my custom logic to check whetever I'll handle the action or not. The data could be a parameter in the database for that purpose.
return base.InvokeActionMethod(methodInfo, parameters);
}
}
それが最善の解決策かどうかはわかりませんが、今のところ、それが私の頭に浮かぶものです。