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

问题描述 投票:2回答:1

我已经创建了一个同时包含MVC和WebAPI的项目。

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

没有OData,一切都很好,我可以成功访问http://localhost/Home/Indexhttp://localhost/api/Values

但是,在更改某些代码以支持OData之后,我无法访问http://localhost/Home/Index。下面是相关代码:

//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/api/Values,但是如果我访问http://localhost/Home/Index,页面将显示错误:

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

odata asp.net-core-2.0 asp.net-core-webapi
1个回答
© www.soinside.com 2019 - 2024. All rights reserved.