0

我有以下代码用我的自定义路由处理程序注册路由:

 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 的 Pluggable MVC 项目,由于升级路径不太顺利,因此我将其逐步引入 MVC 5)

4

1 回答 1

1

从 ASP.net 4 开始,它不会拦截以扩展名结尾的 URL。按照此处的解决方案恢复旧行为。

如果要拦截现有文件,请不要忘记在路由配置中添加此行。

routes.RouteExistingFiles = true;
于 2013-12-04T07:47:46.377 回答