次のパスに.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
ルートの前に置きました。
解決済み!したがって、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() } }
);
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ルートの前に配置する必要があります。