我收到了一个使用 Asp.Net MVC4 构建的原型应用程序。它目前正在用使用 NInject、ServiceLocator 等的自定义控制器工厂替换默认控制器工厂。
问题在于,通过替换默认控制器工厂,对 JS 文件的请求被视为对控制器和操作的合法请求。
因此,查看 Visual Studio 创建的默认模板,路由配置如下所示:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
看完之后,我问自己:为什么对“/Scripts/jquery.js”的请求没有被 Asp.Net MVC 解释?我的意思是,为什么它不认为“脚本”是一个控制器而“jquery.js”是一个动作?
因为如果我禁用控制器工厂覆盖,项目就可以工作,我只能假设默认工厂负责这种检查。这意味着“/Scripts/jquery.js”确实被传递给了控制器工厂,这是我不知道的。
任何人都可以对此有所了解吗?
在覆盖控制器工厂时应该做什么样的处理以避免此类问题?