2015-06-22 2 views
3

Мой веб-приложение ASP.NET является гибридом, который может иметь все различные типы контроллеров -маршрутизации для asp.net Web API вместе с OData

  1. контроллеров asp.net MVC (производными от System.Web.Mvc.Controller)
  2. осины контроллеры .ner Web API (полученные из System.Web.Http.ApiController) и
  3. asp.net на основе контроллеров OData (полученные из System.Web.Http.OData.ODataController)

Я пытаюсь настроить ро uting в 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/значения/GetSummary (для ASP.Net Web API на основе ValuesController методом GetSummary aciton)
  2. Главная страница (для обычных asp.net MVC HomeController)

route эс то не работы-

  1. OData/Резюме
  2. OData/Резюме/GetSummary

Мои обычные контроллеры MVC выполнить хорошо, контроллеры Web API также работают хорошо, но как-то маршрутизация не работает OData контроллеры. Кто-нибудь пытался смешивать и сопоставлять в одном приложении и способен заставить его работать? Мне также нужно указать имя метода действия в маршруте, поскольку весь метод действий в основном равен GET, поскольку это приложение для отчетов.

+0

Можете ли вы опубликовать код для вашего SummaryOdataController Я думаю, что проблема может быть там? – bytebender

ответ

3

Да, можно смешать все эти контроллеры. Если маршрутизация MVC была сначала активирована в Global.asax.cs, то маршрут по умолчанию MVC может не разрешить доступ к контроллерам OData. Изменение порядка строк в Global.asax.cs, как показано ниже, решит проблему. Маршрутизация контроллеров MVC обычно настраивается в RouteConfig.cs, веб-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); 

    } 
Смежные вопросы