2016-10-17 4 views
5

Bei der Definition eines RoutePrefix auf Controller-Ebene, wenn ich versuche, die API-Klasse mit der URL mit Präfix http://localhost:55020/api/v2/dummy/get zuzugreifen, löst 404. Dies http://localhost:55020/api/dummy/get funktioniert jedoch absolut gut.Web API 2 RoutePrefix funktioniert nicht

Hier ist Controller-Klasse, die eine RoutePrefix hat definiert

[RoutePrefix("v2/dummy")] 
    public class DummyController : ApiController 
    { 
     // GET api/values 
     [SwaggerOperation("Get")] 
     public IEnumerable<string> Get() 
     { 
      return new string[] { "value1", "value2", "value3" }; 
     } 
    } 

Hier WebApiConfig statt

public class DummyController : ApiController 
{ 
    // GET api/values 
    [HttpGet] 
    [Route("api/v2/dummy/get")] 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2", "value3" }; 
    } 
} 

Routing

public static class WebApiConfig 
    { 
     public static void Register(HttpConfiguration config) 
     { 
      // Web API configuration and services 

      // Web API routes 
      config.MapHttpAttributeRoutes(); 

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

Antwort

5

Verwendungs-Attribut ist, und wenn Sie Route Präfix wollen, dann

[RoutePrefix("api/v2/dummy")] 
public class DummyController : ApiController 
{ 
    // GET api/v2/dummy 
    [HttpGet] 
    [Route("get")] 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2", "value3" }; 
    } 
} 
+0

Ich möchte die Versionierung auf Controller-Ebene definieren, anstatt jede Aktion machen wollen. Ich meine das Präfix "v1" oder "v2", wenn wir die API aktualisieren – Vikram

+0

ok Ich überprüfe deine Lösung – Mostafiz

+0

überprüfen Update Antwort – Mostafiz

2

Sie vermischen sich damit, wie Attribut-Routing und Convention-basiertes Routing funktionieren.

Dies ist vollständige Attribut-Routing.

[RoutePrefix("api/v2/dummy")] 
public class DummyController : ApiController 
{ 
    // GET api/v2/dummy/get 
    [HttpGet] 
    [Route("get")] 
    [SwaggerOperation("Get")] 
    public IEnumerable<string> Get() 
    { 
     return new string[] { "value1", "value2", "value3" }; 
    } 
} 

Wenn Sie die gleiche Sache über Konvention basiertes Routing

public static class WebApiConfig 
{ 
    public static void Register(HttpConfiguration config) 
    { 
     // Web API configuration and services 

     // Web API routes 
     config.MapHttpAttributeRoutes(); 

     config.Routes.MapHttpRoute(
      name: "DummyApi", 
      routeTemplate: "api/v2/dummy/{action}", 
      defaults: new { controller = "Dummy" } 
     ); 

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