2017-03-01 92 views
0

我正在研究一個asp.net項目,突然間,看起來突然間,API已停止專門爲使用/api/{controller}/{id}路由的路由工作。API突然停止工作,使用常規的網絡路線

使用,例如/api/Events?param1=x&param2=y工作正常。 /{controller}/{action}/{id}

下面是相關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使用它,它似乎退回到常規的網絡路由可選參數{id}時只是:

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 } 
     ); 
    } 

和Global.asax中:

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

不工作的動作中的一個的一個例子:

// 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(); 
      } 
     } 
    } 

回答

0

,這可能是值得的使用Telerik報告任何人。

似乎telerik報告「嚮導」放置在Global.asax中的行導致註冊路由,干擾ASP.NET MVC API創建的默認路由。

的違規行爲:

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

爲了解決我的問題,我從Global.asax頂部招行,只是在最後的路由配置發生:

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(); 
    } 

這已經解決了這個問題!