我有以下代码用自定义路由处理程序注册路由:
routes.Add(New Route(path & "/{assembly}/{*resource}", New RouteValueDictionary(), New RouteValueDictionary(New With { _
Key .assembly = AssemblyName _
}), New EmbeddedContentRouteHandler(PluginAssembly, AssemblyName & "." & path)))
这允许我访问已编译DLL中的嵌入资源,例如:/Content/PluginAssemblyName/File.name
在MVC 3和4中,每次都会触发ProcessRequest函数,但是从MVC 5它不会触发,它只会在我指定目录时触发,这显然会给我一个空引用异常,因为我正在查找文件,而不是目录(显然,由。作为文件命名)
我已经尝试排除.css和.js尝试查看我的自定义路由处理程序是否会触发,没有。在MVC 4项目中进行测试,效果非常好。
开始撕掉我的头发。
为什么RouteHandler不会在MVC 5中启动,而在MVC 4和3中启动?
(这是一个使用MEF的可插拔MVC项目,因为升级路径没有很好地完成,我已经把它带到了MVC 5中)
答案 0 :(得分:1)
启动ASP.net 4,它不会拦截以扩展名结尾的网址。 按照解决方案here恢复旧行为。
如果要拦截现有文件,请不要忘记在路径配置中添加此行。
routes.RouteExistingFiles = true;