Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
asp.net web api和odata的路由_Asp.net_Asp.net Mvc_Asp.net Mvc 4_Asp.net Web Api_Odata - Fatal编程技术网

asp.net web api和odata的路由

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

我的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();
    }
    
    公共静态无效寄存器(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();
    }
    
    工作路线-

  • api/Values/GetSummary(用于基于
    ASP.Net Web api
    ValuesController
    GetSummary
    aciton方法)
  • 主页(适用于常规asp.net MVC
    HomeController
  • 不起作用的路线-

  • odata/摘要
  • odata/Summary/GetSummary

  • 我的常规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的代码贴出来吗?我想问题可能就在那里?