不能将“Microsoft.AspNet.OData.Routing.ODataRoute”与端点路由一起使用。 ASP Net Core 2.2 的异常

Posted

技术标签:

【中文标题】不能将“Microsoft.AspNet.OData.Routing.ODataRoute”与端点路由一起使用。 ASP Net Core 2.2 的异常【英文标题】:Cannot use 'Microsoft.AspNet.OData.Routing.ODataRoute' with Endpoint Routing.' Exception with ASP Net Core 2.2 【发布时间】:2019-05-14 13:11:15 【问题描述】:

ASP NET Web API项目框架升级到Core 2.2版本后,OData路由配置失败。它抛出“不能将'Microsoft.AspNet.OData.Routing.ODataRoute'与端点路由一起使用。”例外。

链接https://github.com/Microsoft/aspnet-api-versioning/issues/361 显示了如何避免异常但禁用新的Core 2.2 路由模型。您能告诉我如何在不停用此功能的情况下解决问题吗?

 public IServiceProvider ConfigureServices(IServiceCollection services)
 
      ...

      services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2).AddControllersAsServices();

      ...
 

 public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
 

    ...

    app.UseMvc(b =>
    
        b.Select().Expand().Filter().OrderBy().MaxTop(100).Count();
        b.MapODataServiceRoute("odata", "odata", ODataConfig.GetEdmModel());
    );

【问题讨论】:

【参考方案1】:

升级到 .net core 2.2 后我遇到了同样的问题,发现 .net core 2.2 默认启用了端点路由,并且他们具有向后禁用它的能力。它对我有用。

services.AddMvc(options =>
                
                  options.EnableEndpointRouting = false;
                )
                .SetCompatibilityVersion(CompatibilityVersion.Version_2_2));

【讨论】:

这是正确的,但我正在寻找一种解决方案,而不禁用新的端点路由。有可能吗? 我也在寻找这个问题的答案。我希望能够使用 Odata 从我的帖子/放置/删除中读取“获取”和常规路由。 我看到 CompatibilityVersion.Version_2_1 的使用符合github.com/OData/WebApi/issues/1707

以上是关于不能将“Microsoft.AspNet.OData.Routing.ODataRoute”与端点路由一起使用。 ASP Net Core 2.2 的异常的主要内容,如果未能解决你的问题,请参考以下文章

为啥不能将类定义为受保护的?

为啥我不能将属性转换为嵌套元素?

为啥不能将窗体的大小绑定到 ApplicationSettings?

为啥不能将匿名方法分配给 var?

为啥我不能将字符串添加到结构中?

为啥我不能将常量数组作为参数传递?