.net – 404控制器在外部组件

前端之家收集整理的这篇文章主要介绍了.net – 404控制器在外部组件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Asp.Net MVC 4项目中无法解决404回复.它内置VS2012定位4.5.

我已经将预编译的视图和控制器内置到独立的DLL中.我可以动态加载DLL并从我的核心项目中检查,甚至调用它们的方法;然而,似乎MVC框架不知道控制器.我在这附近,但有些东西丢了.

控制器和视图背景

控制器内置在独立的MVC项目中,并由Controller继承.没有什么太有趣的那里.这些意见使用RazorGenerator并成为项目中的类.

项目的输出是一个正确包含控制器和视图的DLL.

DLL实现一个特定的接口,我们将它称为IPlugin,在一个单独的类(不是控制器的一部分)在库中.

加载DLL

在Visual Studio中作为管理员运行我编译我的应用程序,它是托管在IIS下.随着项目的建立,我将一个插件DLL放入我的“插件”目录.没有调试(这将变得很重要),我打开IE并导航到该网站.请注意,此时应用程序已经构建,但从未运行,因此启动事件将触发.如果我回收应用程序池,这里的所有内容仍然是一致的.

我有一个启动类有两个方法,PreStart和PostStart,并分别使用WebActivator.PreApplicationStartMethod和WebActivator.PostApplicationStartMethod调用方法.

PreStart是我执行以下操作的地方:

>获取我的“插件”目录中的所有插件DLL的列表
>将所有插件复制到AppDomain.CurrentDomain.DynamicDirectory
>加载类型…如果它包含一个IP插件我然后

>将程序集添加到BuildManager
>调用实现IPlugin的类中的一些方法

在’PostStart’中,我做这个代码(基于RazorGenerator.Mvc的代码):

foreach (var assembly in Modules.Select(m=>m.Value))
{
    var engine = new PrecompiledMvcEngine(assembly)
    {
        UsePhysicalViewsIfNewer = HttpContext.Current.Request.IsLocal
    };

    ViewEngines.Engines.Insert(0,engine);
    VirtualPathFactoryManager.RegisterVirtualPathFactory(engine);
}

此上下文中的模块是键/值对,其中值是加载的程序集.此代码的目的是确保MVC通过为知道如何解析视图(这是RazorGenerator的一部分)的每个程序集添加视图引擎来了解视图.

我怎么知道我很近(但显然没有雪茄)

IPlugin定义了一种名为RegisterRoutes的方法,您猜测它将为实现该接口的用户注册路由.我在PreStart中调用方法,并添加路由 – 我已经验证了这些存在于我的路由表中.例如,在我的插件中定义的路线上,通过在PreStart中动态调用方法创建,在检查我的路由时,我会看到像这样的DataToken:

Namespaces = Plugin.Name.Controllers

所以,路由被注册,程序集被加载,我已经验证了DLL被正确复制到AppDomain的DynamicDirectory.我可以调用在运行时动态加载的类的成员.但是当我导航到路由匹配的URL时,我得到一个404.这不是一个“找不到视图”的YSOD,更类似于没有找到控制器.

这是混淆我的部分:如果在这一点上,没有任何事情,我回到Visual Studio,并点击F5 …一切正常.

就像Visual Studio以某种方式意识到控制器,我无法识别,而且MVC框架正在上升.

最后一个问题

我缺少什么,如何让MVC框架知道我的控制器?

嘿,在这一点上,如果你还在读这个,谢谢. 原文链接:https://www.f2er.com/aspnet/249582.html

猜你在找的asp.Net相关文章