2016-03-22 24 views
0

MVCプロジェクトでWebAPIを使用していますが、APIルートがMVCルーティングによって処理されている問題に直面しています。WebAPIを使用するMVCサイト - MVCルートコンフィグでAPIルートを無視する

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 

    // Register API routes first 
    WebApiConfig.Register(GlobalConfiguration.Configuration); 
    RouteConfig.RegisterRoutes(RouteTable.Routes);  
} 

しかし、それはIgnoreRoute()メソッドを介してこれを行うことは可能だ場合、私は思っていた、私が試した:私はルートは例えばに登録されている順序を変更することでこれを回避することができます

routes.IgnoreRoute("api/{controller}/{*folder}"); 

しかし、私は404を返します。これは、要求が以前と同じようにWebAPIではなくMVCルーティングによって依然として処理されていることを示しているようです。

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

追加MVCルート:

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

に基づく例です。あなたはおそらくそこにあなたのAPIルートに一致するルートを持っています – Nkosi

+0

私は通常、mvcルートの前に私のWeb APIルートを追加します。 – Nkosi

+0

@Nkosiは編集しましたが、私はすでにこれを知っています。 'IgnoreRoutes()'メソッド。 – DGibbs

答えて

1

はコントローラ名がapiすることはできませんと言うカスタム制約を導入

は、ここに私のAPIのルートです。ここで

は、あなたのMVCのルートの設定を表示MVC documentation

public class NoApiControllerConstraint : IRouteConstraint 
{ 
    public bool Match 
     (
      HttpContextBase httpContext, 
      Route route, 
      string parameterName, 
      RouteValueDictionary values, 
      RouteDirection routeDirection 
     ) 
    { 
     return values["controller"] != "api"; 
    } 
} 

routes.MapRoute(
     "Default", 
     "{controller}/{action}", 
     new {controller="Home"}, 
     new {isNotForApi=new NoApiControllerConstraint()} 
); 
関連する問題