用的NullReferenceException Autofac的WebAPI和OData的V4

问题描述 投票:2回答:1

我有一个OData的V4的WebAPI控制器和Autofac的WebAPI一体化V3.4。我已经注册了几个Autofac过滤器(不知道的事项),并得到这个错误,当我尝试访问的OData控制器。我没有问题访问标准的API控制器。我没有看到的OData v4和Autofac的任何信息提示不兼容。任何人对如何解决这个问题有什么建议?虽然不理想,我是否需要回滚到的OData的先前版本? Autofac是很好的集成,所以我不会替换另一个IoC容器。我宁愿回滚的OData如果需要的话。谢谢!

{
  "error":{
    "code":"","message":"An error has occurred.","innererror":{
      "message":"Object reference not set to an instance of an object.","type":"System.NullReferenceException","stacktrace":"   at Autofac.Integration.WebApi.AutofacWebApiFilterProvider.GetFilters(HttpConfiguration configuration, HttpActionDescriptor actionDescriptor)\r\n   at System.Linq.Enumerable.<SelectManyIterator>d__1`2.MoveNext()\r\n   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)\r\n   at System.Linq.OrderedEnumerable`1.<GetEnumerator>d__1.MoveNext()\r\n   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)\r\n   at System.Linq.Enumerable.<ReverseIterator>d__1`1.MoveNext()\r\n   at System.Web.Http.Controllers.HttpActionDescriptor.<RemoveDuplicates>d__3.MoveNext()\r\n   at System.Linq.Buffer`1..ctor(IEnumerable`1 source)\r\n   at System.Linq.Enumerable.<ReverseIterator>d__1`1.MoveNext()\r\n   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)\r\n   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)\r\n   at System.Web.Http.Controllers.HttpActionDescriptor.InitializeFilterPipeline()\r\n   at System.Lazy`1.CreateValue()\r\n   at System.Lazy`1.LazyInitValue()\r\n   at System.Web.Http.Controllers.HttpActionDescriptor.GetFilterGrouping()\r\n   at System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)\r\n   at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()"
    }
  }
}

这里是我的OData控制器:

public class RequestsController : ODataController
    {
        private readonly PtoDbContext _db;
        public RequestsController(PtoDbContext db)
        {
            _db = db;
        }

        [EnableQuery]
        public IQueryable<Request> Get()
        {
            return _db.PtoRequests;
        }

     }

这里是我的OData路由配置:

ODataModelBuilder builder = new ODataConventionModelBuilder();
            builder.EntitySet<Request>("Requests");
            config.MapODataServiceRoute(
                routeName: "ODataRoute",
                routePrefix: "odata",
                model: builder.GetEdmModel());
asp.net-web-api odata autofac
1个回答
0
投票

https://odata.github.io/WebApi/#13-04-DependencyInjection像AutoFac定制DI您需要使用其他的OData路由配置过载(具有配置作用,其配置容器制造商),你注册HTTP配置您的集装箱制造商后。

© www.soinside.com 2019 - 2024. All rights reserved.