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