加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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

发布时间:2020-12-15 22:47:20 所属栏目:asp.Net 来源:网络整理
导读:我在Asp.Net MVC 4项目中无法解决404回复.它内置VS2012定位4.5. 我已经将预编译的视图和控制器内置到独立的DLL中.我可以动态加载DLL并从我的核心项目中检查,甚至调用它们的方法;然而,似乎MVC框架不知道控制器.我在这附近,但有些东西丢了. 控制器和视图背景
我在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框架知道我的控制器?

嘿,在这一点上,如果你还在读这个,谢谢.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读