是否可以使用ODATA配置多个路由

时间:2018-02-24 07:33:40

标签: odata asp.net-core-2.0 asp.net-core-webapi

我创建了一个包含MVC和WebAPI的项目。

有一个名为HomeController的MVC控制器,它只包含一个名为Index的动作。 此外,还有一个名为ValuesController的API控制器。

没有OData,一切正常,我可以成功访问https://dotnetfiddle.net/dBJpo2http://localhost/Home/Index

但是,在我更改了一些代码以支持OData后,我无法访问http://localhost/api/Values。以下是相关代码:

    //startup.cs
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDbContext<ProductsContext>(options =>
        {
            options.UseInMemoryDatabase("InMemoryDb");
        });

        //Adding OData middleware.
        services.AddOData();
        services.AddMvc();
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider provider)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        //Adding Model class to OData
        var builder = new ODataConventionModelBuilder(provider);
        builder.EntitySet<ValuesEntity>("Values");

        builder.EntityType<ValuesEntity>().Filter(QueryOptionSetting.Allowed).OrderBy(QueryOptionSetting.Allowed);


        //Enabling OData routing.
        app.UseMvc(routebuilder =>
        {
            routebuilder.MapODataServiceRoute("odata", "api", builder.GetEdmModel());

            routebuilder.MapRoute(
                name: "default",
                template: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}

正如您所看到的,有多条路线,但默认路线似乎永远不会被使用。

我仍然可以访问http://localhost/Home/Index,但如果我访问http://localhost/api/Values,该页面会显示错误:

  

处理请求时发生未处理的异常。   ArgumentNullException:值不能为null。   参数名称:routeName   Microsoft.AspNet.OData.Extensions.HttpRequestExtensions.CreateRequestScope(HttpRequest request,string routeName)

0 个答案:

没有答案