2016-05-12 5 views
3

Ich habe meinem MVC-Projekt einen Api-Controller hinzugefügt. Und aus folgenden Änderungen:Registrieren von Api-Controller-Routen mit MVC-Projekt

Mein WebApiConfig

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

      config.Routes.MapHttpRoute(
       name: "GetFirms", 
       routeTemplate: "api/B2bApi/GetFirms", 
       defaults: new { controller = "B2bApiController", action= "GetFirms" }); 
     } 
    } 

Ich registrieren diese Route in Global.asax (letzte Zeile)

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
    RouteConfig.RegisterRoutes(RouteTable.Routes); 
    BundleConfig.RegisterBundles(BundleTable.Bundles); 
    GlobalConfiguration.Configure(WebApiConfig.Register); 
} 

Ich habe in debuggt und sah, dass meine Routen registriert sind. So, hier ist mein Controller:

public class B2bApiController : ApiController 
    { 
     [HttpGet] 
     public string GetFirms() 
     { 
      return "test"; 
     } 
    } 

Wenn ich navigieren zu

/api/B2bApi/GetFirms

ich erhalte

404 Fehler

.

Wie kann man api-Routen korrekt registrieren?

Antwort

3

Wenn asp.net-mvc-4

WebApiConfig.Register(GlobalConfiguration.Configuration); 

wenn asp.net-mvc-5 und asp.net-web-api-2

GlobalConfiguration.Configure(WebApiConfig.Register); 

muss sein platziert über

RouteConfig.RegisterRoutes(RouteTable.Routes); 

Beispiel:

1

Ich nehme an, dass Sie ein separates Projekt für WebApi erstellen. Wenn Sie nicht falsch liegen, haben Sie WebApiConfig in Global.asax nicht registriert.

entfernen diese

RouteConfig.RegisterRoutes(RouteTable.Routes); 

und fügen

WebApiConfig.Register(GlobalConfiguration.Configuration); 

Es sieht aus wie -

enter image description here

0

Wenn eine Steuerung Angabe für die Standard das Stichwort "Controller" entfernen in Ihnen Name des Controllers

config.Routes.MapHttpRoute(
     name: "GetFirms", 
     routeTemplate: "api/B2bApi/GetFirms", 
     defaults: new { controller = "B2bApi", action = "GetFirms" }); 

Auch wie andere gesagt haben, bewegen Sie Ihr Register an die Spitze.

protected void Application_Start() 
{ 
    AreaRegistration.RegisterAllAreas(); 

    WebApiConfig.Register(GlobalConfiguration.Configuration); 
    FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
    RouteConfig.RegisterRoutes(RouteTable.Routes); 
    BundleConfig.RegisterBundles(BundleTable.Bundles); 
} 
Verwandte Themen