繁体   English   中英

asp.net web api和odata的路由

[英]routing for asp.net web api along with odata

我的asp.net Web应用程序是混合的,可以拥有所有不同类型的控制器 -

  1. asp.net MVC控制器(派生自System.Web.Mvc.Controller
  2. asp.ner Web API控制器(派生自System.Web.Http.ApiController )和
  3. 基于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();
}

有效的路线 -

  1. api / Values / GetSummary(对于基于ASP.Net Web APIValuesControllerGetSummary aciton方法)
  2. 主页(常规asp.net MVC HomeController

不起作用的路线 -

  1. 的OData /概述
  2. 的OData /概述/ GetSummary

我的常规MVC控制器执行良好,Web API控制器也工作正常,但不知何故路由不适用于OData控制器。 有没有人尝试在一个应用程序中混合搭配并能够使其工作? 我还需要在路由中指定操作方法名称,因为所有操作方法都是GET因为它是一个报告应用程序。

是的,可以混合所有这些控制器。 如果首先在Global.asax.cs中激活MVC的路由,则MVC的默认路由可能不允许到达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);

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM