在同一个解决方案中,还有一个 ASP.NET MVC4 应用程序Slick.App
和类库Awesome.Mvc.Lib
。Awesome.Mvc.Lib 包含一个控制器类。
public class ShinnyController : Controller
{
[HttpGet]
public string Index()
{
return "Hello, from Awesome.Mvc.Lib";
}
}
如果我只是将 Slick.App 的引用添加到 Awesome.Mvc.Lib,运行应用程序并将浏览器指向/shinny
,我实际上会看到响应“你好,来自 Awesome.Mvc.Lib”。
这是我完全没想到的。我一直认为 ASP.NET MVC 尊重放置控制器的命名空间。因此,来自另一个命名空间的控制器没有暴露,至少在我没有要求之前。
我试图更改默认路由注册,以使用命名空间参数。
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new [] { "Slick.App.Controllers" }
);
尽管如此,ShinnyController 路由仍然匹配 '/shinny'。
我担心这是正确的默认行为。我的问题是,如何明确说明暴露了哪些控制器并防止默认路由匹配单独的类库中的控制器?