我创建了一个包含MVC和WebAPI的项目。
有一个名为HomeController的MVC控制器,它只包含一个名为Index的动作。 此外,还有一个名为ValuesController的API控制器。
没有OData,一切正常,我可以成功访问https://dotnetfiddle.net/dBJpo2和http://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)