asp.net web api 的路由以及 odata
routing for asp.net web api along with odata
我的 asp.net 网络应用程序是混合的,可以有所有不同类型的控制器 -
- 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 控制器配置路由,它看起来像这样 -
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();
}
可行的路线 -
- api/Values/GetSummary(对于
ASP.Net Web API
基于 ValuesController
和 GetSummary
aciton 方法)
- 主页(对于常规 asp.net MVC
HomeController
)
行不通的路线-
- odata/Summary
- odata/Summary/GetSummary
我的常规 MVC 控制器运行良好,Web API 控制器也运行良好,但不知何故路由不适用于 OData 控制器。有没有人尝试过在单个应用程序中混合搭配并能够使其工作?我还需要在路由中指定操作方法名称,因为所有操作方法大部分都是 GET
因为它是一个报告应用程序。
是的,可以混合使用所有这些控制器。如果 MVC 的路由首先在 Global.asax.cs 中激活,则 MVC 的默认路由可能不允许到达 OData 控制器。
如下所示更改 Global.asax.cs 中的行顺序将解决问题。如果使用项目模板,MVC 控制器路由通常在 RouteConfig.cs 中设置,Web API 和 OData 路由在 WebAPIConfig.cs 中设置。
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);
}
我的 asp.net 网络应用程序是混合的,可以有所有不同类型的控制器 -
- 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 控制器配置路由,它看起来像这样 -
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();
}
可行的路线 -
- api/Values/GetSummary(对于
ASP.Net Web API
基于ValuesController
和GetSummary
aciton 方法) - 主页(对于常规 asp.net MVC
HomeController
)
行不通的路线-
- odata/Summary
- odata/Summary/GetSummary
我的常规 MVC 控制器运行良好,Web API 控制器也运行良好,但不知何故路由不适用于 OData 控制器。有没有人尝试过在单个应用程序中混合搭配并能够使其工作?我还需要在路由中指定操作方法名称,因为所有操作方法大部分都是 GET
因为它是一个报告应用程序。
是的,可以混合使用所有这些控制器。如果 MVC 的路由首先在 Global.asax.cs 中激活,则 MVC 的默认路由可能不允许到达 OData 控制器。 如下所示更改 Global.asax.cs 中的行顺序将解决问题。如果使用项目模板,MVC 控制器路由通常在 RouteConfig.cs 中设置,Web API 和 OData 路由在 WebAPIConfig.cs 中设置。
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);
}