web-dev-qa-db-ja.com

asp.net mvc 3プロジェクトで.aspxページをルーティングする方法は?

次のパスに.aspxページがあります。

Areas/Management/Views/Ticket/Report.aspx

それをブラウザの次のパスにルーティングしたいと思います。

http://localhost/Reports/Tickets

どうやってやるの?

私はこれを試します:

routes.MapRoute(
    "Tickets", // Route name
    "Areas/Management/Views/Ticket/Report.aspx", // Original URL
    new { controller = "Reports", action = "Tickets" } // New URL 
);

しかし、404エラーが発生しました。

私は何を間違っているのですか?

Obs:それをDefaultルートの前に置きました。

14
Vinicius Ottoni

解決済み!したがって、Webフォームルートにルート制約を追加して、発信ルートの生成ではなく、着信ルートのみをキャッチするようにする必要があります。

次のクラスをプロジェクトに追加します(新しいファイルまたはglobal.asax.csの下部)。

public class MyCustomConstaint : IRouteConstraint{
    public bool Match(HttpContextBase httpContext, Route route, string parameterName, RouteValueDictionary values, RouteDirection routeDirection){
        return routeDirection == RouteDirection.IncomingRequest;
    }
}

次に、チケットルートを次のように変更します。

routes.MapPageRoute(
    "Tickets",
    "Reports/Tickets",
    "~/WebForms/Reports/Tickets.aspx",
    true, null, 
    new RouteValueDictionary { { "outgoing", new MyCustomConstaint() } }
);
13
Vinicius Ottoni

MVCプロジェクトでWebフォームを利用しようとしている場合は、実際にはビューではないため、.aspxをviewsフォルダーから移動します。WebForms/ Tickets /Report.aspxのようなものです。

Webフォームでは、MapPageRouteメソッドを呼び出してルートをマップします。

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapPageRoute("Tickets", "Reports/Tickets", "~/WebForms/Tickets/Report.aspx");
routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });

これをデフォルトのMVCルートの前に配置する必要があります。

22
Chris Diver