asp.net web api和odata的路由
我的asp.net web应用程序是混合的,可以有所有不同类型的控制器-asp.net web api和odata的路由,asp.net,asp.net-mvc,asp.net-mvc-4,asp.net-web-api,odata,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Asp.net Web Api,Odata,我的asp.net web应用程序是混合的,可以有所有不同类型的控制器- asp.net MVC控制器(源自System.Web.MVC.Controller) asp.ner Web API控制器(源自System.Web.Http.ApiController)和 基于asp.net的OData控制器(源自System.Web.Http.OData.ODataController) 我正在尝试在WebApiConfig.cs中为Web API和OData控制器配置路由,它看起来像这样- pub
System.Web.MVC.Controller
)System.Web.Http.ApiController
)和System.Web.Http.OData.ODataController
)WebApiConfig.cs
中为Web API和OData控制器配置路由,它看起来像这样-
public static void Register(HttpConfiguration config)
{
config.Routes.MapODataRoute("OData", "odata", CreateEdmModel());
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional });
}
public static IEdmModel CreateEdmModel()
{
ODataConventionModelBuilder modelBuilder = new ODataConventionModelBuilder();
modelBuilder.EntitySet<Detail>("Details");
return modelBuilder.GetEdmModel();
}
公共静态无效寄存器(HttpConfiguration配置)
{
MapODataRoute(“OData”,“OData”,createdModel());
config.Routes.MapHttpRoute(
名称:“DefaultApi”,
routeTemplate:“api/{controller}/{action}/{id}”,
默认值:new{id=RouteParameter.Optional});
}
公共静态IEdmModel CreateDMModel()
{
ODataConventionModelBuilder modelBuilder=新ODataConventionModelBuilder();
modelBuilder.EntitySet(“详细信息”);
返回modelBuilder.GetEdmModel();
}
工作路线-
ASP.Net Web api
的ValuesController
和GetSummary
aciton方法)HomeController
)我的常规MVC控制器执行得很好,WebAPI控制器也很好,但OData控制器的路由不起作用。有没有人尝试过在单个应用程序中进行混合和匹配,并能够使其正常工作?我还需要在路由中指定操作方法名称,因为所有操作方法大多是
GET
,因为它是一个报告应用程序。是的,可以混合使用所有这些控制器。如果MVC的路由首先在Global.asax.cs中激活,则MVC的默认路由可能不允许到达OData控制器。
如下所示更改Global.asax.cs中的行顺序将解决此问题。如果使用了项目模板,MVC控制器路由通常在RouteConfig.cs、Web API和WebApicConfig.cs中的OData路由中设置
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
GlobalConfiguration.Configure(WebApiConfig.Register); // moved up before MVC's setup
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
你能把SummaryOdataController的代码贴出来吗?我想问题可能就在那里?