カスタムIroutehandlerルートは、MVCリンクビルディングをねじ込みます

StackOverflow https://stackoverflow.com/questions/4351415

  •  08-10-2019
  •  | 
  •  

質問

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ビルディングロジックに影響を与えるにはどうすればよいですか?

役に立ちましたか?

解決

説明された動作を停止するためのハックを思いつきました。これは問題を「解決」しますが、それは本当に厄介なものであり、仮想パスビルディングロジックからルートを除外するよりクリーンな方法を好む

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」である場合にのみ、ルートが仮想パス構築に選択されることを意味します。私はそれが厄介だと言った。

他のヒント

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

<%: Html.RouteLink("link text", "Default", 
    new { action = "add", controller = "home" }) %>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top