【问题标题】:NullReferenceException with Autofac WebApi and OData v4带有 Autofac WebApi 和 OData v4 的 NullReferenceException
【发布时间】: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


【解决方案1】:

根据https://odata.github.io/WebApi/#13-04-DependencyInjection 对于像 AutoFac 这样的自定义 DI,在使用 http 配置注册容器构建器后,您需要使用另一个 OData 路由配置重载(具有配置容器构建器的配置操作)。

【讨论】:

    猜你喜欢
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    • 2015-11-06
    • 2014-07-26
    • 2016-11-02
    • 2019-09-27
    • 2016-06-25
    相关资源
    最近更新 更多