私はMVC2Webサイトと共存するWCFサービスを持っています。サービスのURLを次のようにしたいと思います。
http://localhost/projdir/Service
MVCサイトはまだ初期段階にあるため、ボイラープレートコントローラーなどはすべて残っています。
次のコードは、global.asaxで一見すると機能します。
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.Add(new ServiceRoute("Service", new ServiceHostFactory(),
typeof(MyService)));
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index",
id = UrlParameter.Optional } // Parameter defaults
);
}
このサービスは、私が説明した場所に表示され、宣伝どおりに機能します。素晴らしい。
ただし、この方法でコードを注文すると、すべてのコードが変更されることに気づきましたActionLink
。たとえば、MVCサイトの[バージョン情報]タブは次のように表示されます。
http://localhost/projdir/Service?action=About&controller=Home
これは明らかに正しくありません(そうあるべきですhttp://localhost/projdir/Home/About/
)。
ServiceRoute
追加をデフォルトのMapRoute()
呼び出しの下に移動すると、コントローラーが見つからないというエラーが発生します。(実際には、「StructureMapControllerFactoryはコントローラーのインスタンスを返しませんでした」というエラーが発生します。これは、StructureMapに接続しているためです。そもそも、コントローラーではありません。)
興味深いことに、それはの出力にのみ影響を与えているようですHtml.ActionLink()
。手動で入力しhttp://localhost/projdir/Home/About/
て正しいページに移動できます。
私が犯している恐ろしく明らかな初心者の間違いは何ですか?