1

ASP.NET MVC2にカスタムルートハンドラーがあり、次のようなプレフィックス付きパスですべてのURLをキャッチします。

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new Route("@api/{*all}", new ApiHandler()));
routes.MapRoute(
  "Default", // Route name
  "{controller}/{action}/{id}", // URL with parameters
  new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
);

ルーティングは正常に機能しますが、Html.Actionlinkを使用するか、コントローラーからReturnToAction()を返すと、構築されたURIは次のような壊れたURIを作成します。

/@api?action=Add&controller=Home

それ以外の

/Home/Add

デフォルトルートパターンを考慮するために、URI構築ロジックにどのように影響を与えることができますか?

4

2 に答える 2

1

説明されている動作を停止するためのハックを考え出しました。これは問題を「解決」しますが、それは本当に厄介なことであり、仮想パス構築ロジックからルートを除外するためのよりクリーンな方法を好みます

routes.Add(
  new Route("@api/{*all}",
  // A random and unlikely controller name as the default
  new RouteValueDictionary() { { "controller", "qwewqewqeqweq" } },
  // and a constraint requiring any controller to be that random, default value
  new RouteValueDictionary() { { "controller", "qwewqewqeqweq" } }, 
  new ApiHandler()
);

これは、問題のコントローラーが「qwewqewqeqweq」である場合にのみ、仮想パスの構築にルートが選択されることを意味します。嫌だと言った。

于 2010-12-04T15:31:47.097 に答える
0

RouteLinkヘルパーを使用してルートの名前を指定できます。

<%: Html.RouteLink("link text", "Default", 
    new { action = "add", controller = "home" }) %>
于 2010-12-04T10:54:13.427 に答える