【发布时间】:2012-06-20 02:38:53
【问题描述】:
在同一个解决方案中,还有一个 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'。
我担心这是正确的默认行为。我的问题是,如何明确说明暴露了哪些控制器并防止默认路由匹配单独类库中的控制器?
【问题讨论】:
标签: c# asp.net .net asp.net-mvc