エリアを備えたMVC3アプリケーションがあり、特定のエリアとコントローラーからのサービスを公開しています。このサービスへのルーティングは、AreaRegistration内で次のように定義されます。
public class AreaAreaRegistration : AreaRegistration
{
public override string AreaName
{
get { return "Area"; }
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.Routes.Add(
new ServiceRoute("Area/Controller/Service",
new NinjectServiceHostFactory(), typeof(MyService)));
// ....
}
}
私Global.asax.cs
の場合、デフォルトルートのみを定義します
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
私_Layout.chshtml
のホームページへのリンクがあり、そこに空の領域を指定します。これにより、上部のフォルダー(Areasフォルダーの外)にIndex
アクションが見つかると思います。HomeController
Controllers
@Html.ActionLink("Home", "Index", "Home", new { area = "" }, null)
何らかの理由で、これは次ActionLink
のようにレンダリングされます
~/Area/Controller/Service?action=Index&controller=Home
ServiceRouteをコメントアウトすると、同じことが私が期待していることですActionLink
。~/
このルーティングの問題を修正する方法はありますか?私が見つけた唯一の回避策は、代わりにこれを使用することです。
<a href="@Url.Content("~/")">Home</a>