3

私の MVC3 Web サイトには、次のルート定義があります。

routes.MapRoute(
                "FB", // Route name
                "fb/{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            ).RouteHandler = new RH();

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

私のカスタム「RH」ハンドラーのコードは

public class RH : MvcRouteHandler
    {
        protected override IHttpHandler GetHttpHandler(RequestContext requestContext)
        {
            //here I store somewhere that 'fb' prefix is used, so logic is different in some places
            return base.GetHttpHandler(requestContext);
        }
    }

私が達成したいのは、私のウェブサイトが「fb」サブパスプレフィックスでアクセスされると、私のウェブサイトロジックが少し異なる方法で実行されることです。

問題は、自分のサイトに通常どおりアクセスしたとき (例: http://localhost )、次に実行したときです。

Url.Action('action' 'controller')

、出力は「http://localhost/fb/controller/action」です。

私のサイトが 'fb' プレフィックス付きサブパスでアクセスされたとき、私の Url.Action は出力 /fb/controller/action パスを呼び出し、Web サイトに通常どおり ('fb' プレフィックス サブパスなしで) アクセスすると、達成したいと考えています。 Url.Action 呼び出しの出力 /controller/action

主なことは、 /fb/controller/actions は、サイトが /controller/action 形式でアクセスされるときと同じコントローラー/アクションにルーティングする必要があるということです。

「fb」ルートは、「fb」プレフィックスを使用したときに一時的な情報を保存するために必要です。

4

1 に答える 1

3

このリンク ( MVC 3 Routing and Action Links not follow expected contextual Route ) に基づく解決策を見つけたようです。新しいパスプレースホルダーが導入され、制約が追加されました。

多分それは十分ではないか、あなたはこれよりもよく知っていますが、私にとってはうまくいくようです:

routes.MapRoute(
        "FB", // Route name
        "{path}/{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }, // Parameter defaults
        new { path = "fb" }
).RouteHandler = new RH();

routes.MapRoute(
        "Default", // Route name
        "{controller}/{action}/{id}", // URL with parameters
        new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);
于 2012-04-15T07:53:47.987 に答える