【发布时间】:2012-03-07 14:39:41
【问题描述】:
我有一个带有可移植区域的 ASP.NET MVC 3 应用程序(在 IIS 7.5 中)。当我在网站中托管使用便携式区域的应用程序时,我的路由可以完美运行,例如
但是,当托管在虚拟目录中时,例如
http://localhost/Acme.Risks.Clearance.Web.Area.TestUI/Clearance/Home/Search(这不起作用)
我收到以下错误:
找到了与名为“Home”的控制器匹配的多种类型。如果服务此请求的路由 ('Clearance/{controller}/{action}') 未指定命名空间来搜索与请求匹配的控制器,则可能会发生这种情况。如果是这种情况,请通过调用带有“namespaces”参数的“MapRoute”方法的重载来注册此路由。
我不明白为什么,我指定的命名空间在网站中运行时可以正常工作。
这是我的便携式区域注册:
public override void RegisterArea(AreaRegistrationContext context, IApplicationBus bus)
{
if (context == null)
{
throw new ArgumentNullException("context");
}
base.RegisterArea(context, bus);
context.MapRoute(
RouteName.ClearanceAreaDefault,
this.AreaName + "/{controller}/{action}/{id}",
new { controller = "Home", action = "Search", id = UrlParameter.Optional },
new[] { typeof(HomeController).Namespace });
}
这是虚拟目录中 Web 应用程序的 Global.asax(不起作用):
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 },
new[] { typeof(HomeController).Namespace });
}
这是网站中 Web 应用程序的 Global.asax(确实有效):
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 },
new[] { "Acme.Risks.Web.UI.Controllers" });
}
我使用了 Phil Haack 的“RouteDebugger”(http://nuget.org/packages/routedebugger),两个请求的路由调试信息是相同的。
有人知道为什么会这样吗?
谢谢,
卡勒姆
【问题讨论】:
标签: asp.net-mvc-3 routes