我的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控制器配置路由,它看起来像这样 –
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 /摘要
> odata /摘要/ GetSummary
我的常规MVC控制器执行良好,Web API控制器也工作正常,但不知何故路由不适用于OData控制器.有没有人尝试在一个应用程序中混合搭配并能够使其工作?我还需要在路由中指定操作方法名称,因为所有操作方法都是GET,因为它是一个报告应用程序.
解决方法
是的,可以混合所有这些控制器.如果首先在Global.asax.cs中激活MVC的路由,则MVC的默认路由可能不允许到达OData控制器.
如下所示更改Global.asax.cs中的行顺序将解决该问题.如果使用项目模板,MVC控制器路由通常在WebAPIConfig.cs中的RouteConfig.cs,Web API和OData路由中设置.
如下所示更改Global.asax.cs中的行顺序将解决该问题.如果使用项目模板,MVC控制器路由通常在WebAPIConfig.cs中的RouteConfig.cs,Web API和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); }