2017-03-01 3 views
0

Ich arbeite an einem ASP.net-Projekt und plötzlich, scheinbar aus heiterem Himmel, funktioniert die API nicht mehr speziell für Routen, die die Route /api/{controller}/{id} verwenden.API funktioniert plötzlich nicht mehr und verwendet normale Webrouten

Verwenden Sie zum Beispiel /api/Events?param1=x&param2=y funktioniert gut. Es ist nur, wenn der optionale Parameter mit {id}, die es zurück zum normalen Web-Route zu fallen scheint: /{controller}/{action}/{id}

Hier sind die relevanten configs:

WebApiConfig.cs:

public static void Register(HttpConfiguration config) 
    { 
     config.MapHttpAttributeRoutes(); 

     config.Formatters.JsonFormatter.SupportedMediaTypes 
      .Add(new System.Net.Http.Headers.MediaTypeHeaderValue("text/html")); 

     config.Routes.MapHttpRoute(
      name: "DefaultApi", 
      routeTemplate: "api/{controller}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
     ); 
    } 

RouteConfig.cs:

public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 

und Global.asax:

Ein Beispiel für eine der Aktionen, die nicht funktioniert:

// GET: api/Events/5 
    [HttpGet] 
    public EventReadDTO Get(int id) 
    { 
     using (var session = DBSessionFactory.OpenSession()) 
     { 
      using (ITransaction transaction = session.BeginTransaction()) 
      { 
       return session.Query<Event>() 
        .Where(e => e.Id == id) 
        .ToList() 
        .Select(x => Mapper.Map<EventReadDTO>(x)) 
        .FirstOrDefault(); 
      } 
     } 
    } 

Antwort

0

Dieses ist für jedermann lohnen kann unter Verwendung von Telerik Berichte.

Es scheint, dass die Zeile, die in Global.asax von dem Telerik-Bericht "Assistenten" platziert wird, eine Route registriert, die die Standardroute beeinträchtigt, die von ASP.NET MVC API erstellt wird.

Die Codezeile ist:

Telerik.Reporting.Services.WebApi.ReportsControllerConfiguration.RegisterRoutes(System.Web.Http.GlobalConfiguration.Configuration); 

Um mein Problem zu lösen, ich bewege die Leitung von den oben von Global.asax nur nach der letzten Streckenkonfiguration erfolgt:

protected void Application_Start() 
    {    
     AreaRegistration.RegisterAllAreas(); 
     GlobalConfiguration.Configure(WebApiConfig.Register); 
     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     Telerik.Reporting.Services.WebApi.ReportsControllerConfiguration.RegisterRoutes(System.Web.Http.GlobalConfiguration.Configuration); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
     AutoMapperConfig.RegisterMaps(); 
    } 

Das hat das Problem gelöst!

Verwandte Themen