在运行时添加OData V3控制器-找不到控制器

本文关键字:控制器 找不到 V3 OData 运行时 添加 | 更新日期: 2023-09-27 18:16:27

我在VS2013下有一个OData V3 c#项目,我想在运行时在单独的类库中加载/注入odatcontroller,并使该服务成为路由。问题是我无法将路由解析到控制器。例如http://localhost/odata/Tests

"No type was found that matches the controller named 'TestsController'"
下面是我的控制器在单独的类库中的样子:
namespace WebApi.Extensions
{
  public class TestsController : ODataController
  {
    var t = "some string";
    public IHttpActionResult Get(ODataQueryOptions<Test> queryOptions)
    {
      ...
    }
  }
}

在我的WebApi Register()方法我有这个:

public static void Register(HttpConfiguration config)
{
  var builder = new ODataConventionModelBuilder();
  <lots of 'local' builder.EntitySet<***>("***") calls>
  builder.EntitySet<Test>("Tests");
  var assembly = Assembly.LoadFrom("<full path to classlib.dll>");
  // test that we can find and load an instance
  var type = assembly.GetType("WebApi.Extensions.TestsController");
  var obj = Activator.CreateInstance(type);
  // no errors so far.  I can 'see' into 'obj'
  config.Routes.MapODataRoute("odata", "odata", builder.GetEdmModel() );
}

有人知道为什么我不能得到路由解析到控制器类吗?我是不是漏掉了什么东西把它们连在一起?

在运行时添加OData V3控制器-找不到控制器

我发现我错过了什么。

在ASP中定制控制器发现。净

你本质上是自己编写并注册一个自定义DefaultAssembliesResolver,在那里你可以从bin目录(如果托管在IIS下)中自动提取程序集列表,并从任何你想要的目录中添加你自己的程序集。

注意:上面链接中发布的源代码有一个错误。浏览博客评论