【发布时间】:2019-02-07 06:36:05
【问题描述】:
我有一个 OData v4 WebApi 控制器和 Autofac WebApi Integration 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());
【问题讨论】:
-
我还运行了使用实体框架添加 OData v3 端点的选项,并按照说明 here 并得到了相同的空引用异常。
-
您解决了这个问题吗?我面临着类似的问题。
-
有解决办法吗?
标签: asp.net-web-api odata autofac