我正在尝试执行看起来很简单的任务 - 从我的项目中的单独程序集中调用控制器。
但是,当我从该控制器请求信息时,我收到错误 404。我已经与它斗争了 5-6 个小时,我怀疑我可能遗漏了一些小而明显的东西,这就是我希望得到建议的原因。
我在 stakoverflow 上发现了关于路由和错误 404 的类似问题,但是当我实施另一个原型项目时,我没有收到此类错误并使用类似的代码结构,我相信他们描述的问题与我的不同。
对于一般情况 - 我想要实现的总体目标是在独立项目中实现一个区域,就像这里描述的那样。我做了所有事情,就像链接中解释的那样,一个小原型(它工作得很好),现在正试图申请真正的项目。
这就是我包含装配和管理路线的方式:
- 有一个主项目,其中一个区域代表隐藏的子项目“CommunicationBus”
“CommunicationBus”项目包含一个“CommunicationBusAreaRegistration”类。注册路由可以正常工作,我可以使用调试器到达这里,当我使用 routedebugger 时我也可以看到这条路由(见下面的截图)。我也为这个类玩过命名空间,最后尝试添加
.Areas.CommunicationBus
,但我注意到它没有任何区别。namespace MBVD.MainProject.UI { public class CommunicationBusAreaRegistration : AreaRegistration { public override string AreaName { get { return "CommunicationBus"; } } public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "CommunicationBus_default", "CommunicationBus/{controller}/{action}/{id}", new { action = "Index", id = UrlParameter.Optional }, new string[] { "CommunicationBus.Controllers" } ); } } }
在主项目的 Global.asax 中,我通过以下方式注册路由:
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // Route name "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }, new[] { "MBVD.MainProject.UI.Controllers" } ); }
如果我在这里引用“CommunicationBus.Controllers”,我将无法再打开主应用程序的页面。但是,我相信我只需要在此处注册主应用程序控制器的路径
CommunicationBus 项目的输出路径设置为主项目的 bin 文件夹。每次我构建 CommunicationBus 时,我都会在主项目中获得一个新的 .dll。
我在 CommunicationBus 项目中添加了一个简单的控制器:
namespace CommunicationBus.Controllers { public class TestController : Controller { [HttpGet] public string Index() { return "It works!"; } } }
我添加了一个指向主项目的链接
@Html.ActionLink("test","Index","Test", new {Area="CommunicationBus"}, null)
这是:
本地主机:63254/CommunicationBus/Test
我使用 routedebugger 并没有显示任何可疑之处:
我对这两个项目都使用了 ASP.NET MVC 4。
我将不胜感激有关我可以做些什么来弄清楚为什么会出现此错误的任何想法。