2017-03-01 17 views
0

私はasp.netプロジェクトに取り組んでいて、一見外見上、APIは/api/{controller}/{id}ルートを使用するルートでは特に機能しなくなりました。通常のウェブルートを使用してAPIが突然停止しました

たとえば、/api/Events?param1=x&param2=yを使用すると問題なく動作します。

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ここ/{controller}/{action}/{id}

は、関連するコンフィグある:通常のWebルートにフォールバックするようで、オプションのパラメータ{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(); 
    } 

これは問題を解決しました!

関連する問題