2016-03-22 10 views
0

MVAP projemde WebAPI kullanıyorum ve API yollarının MVC yönlendirmesiyle ele alındığı bir sorunla karşı karşıyayım.WebAPI kullanarak MVC sitesi - MVC Route Config içinde API yolları yoksay

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

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

Ama IgnoreRoute() yöntemi ile bunu yapmak mümkün olup olmadığını merak ediyorum, denedim: Ben yolları eg kayıtlıdır sırasını değiştirerek bu sorunun üstesinden gelebilirsiniz

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

Ancak, geri dönme işleminin daha önce olduğu gibi WebAPI'yi değil MVC yönlendirmesiyle işlendiğini gösteren bir 404 geri aldım.

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

Eklendi MVC rota:

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

dayalı bir örnektir. Muhtemelen bir rota var senin api rotaları eşleşen – Nkosi

+0

Normalde benim web api rotaları eklemek mvc yolları önce – Nkosi

+0

@Nkosi Düzenlemek için Düzenlenmiş, ancak ben zaten bunu biliyorum, ben tarafından eşleştirilmesini önlemek için bir yol arıyorum IgnoreRoutes() yöntemi. – DGibbs

cevap

1

Kontrolör adı api olamayacağını söylüyor özel kısıtlamasını tanıtın

İşte benim API yoldur. İşte

sizin mvc rota yapılandırma göster 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()} 
);