我已经创建了一个同时包含MVC和WebAPI的项目。
[有一个名为HomeController的MVC控制器,它仅包含一个名为Index的动作。另外,还有一个名为ValuesController的API控制器。
没有OData,一切都很好,我可以成功访问http://localhost/Home/Index和http://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)