ControllerBuilder()
在解析Controller真实类型的过程中会先使用RouteData包含的命名空间如果解析失败则通过由RouteData的DataTokens属性得到的这个名为UseNamespaceFallback的变量值来判断是否使用后备命名空间进行解析具体来说如果该值为True或者不存在则先通过当前ControllerBuilder的命名空间解析如果失败则忽略命名空间直接采用类型名称进行匹配否则会因找不到匹配的Controller而直接抛出异常
我们通过具体的例子来说明这个问题在一个ASPNET MVC应用中通过Area添加向导创建一个名称为Admin的Area此时IDE会默认为我们添加了如下一个AdminAreaRegistration类型
NamespaceMvcAppAreasAdmin
{
public class AdminAreaRegistration : AreaRegistration
{
public override string AreaName
{
get{return Admin;}
}
public override void RegisterArea(AreaRegistrationContext context)
{
contextMapRoute(
Admin_default
Admin/{controller}/{action}/{id}
new { action = Index id = UrlParameterOptional }
)
}
}
}
AdminAreaRegistration类型定义在命名空间MvcAppAreasAdmin中现在我们在该Area中添加如下一个HomeController在默认的Action方法Index中我们从当前RouteData的DataTokens中提取这个名为UseNamespaceFallback的变量值并将它和解析出来的Controller类型名称写入当前HttpResponse而最终呈现在客户端浏览器中在默认情况下添加的HomeController类型被定义在MvcAppAreasAdminControllers命名空间下现在我们刻意将命名空间改为MvcAppAreasControllers
[] []