-1

Wie kann ich Routing in ASP.NET Web API konfigurieren, um es an bestimmte Methode in Controller mit GET-Methode zu leiten?ASP.NET Web API 2 benutzerdefiniertes Routing zu bestimmter Methode

http://mysite/healthcheck

Registrierung in WebAPiConfig sieht wie folgt aus:

config.MapHttpAttributeRoutes(); 

    config.Routes.MapHttpRoute(
     name: "HealthCheck", 
     routeTemplate: "healthcheck", 
     defaults: new { action =" DefaultAction" } 
    ); 

Der Controller sieht wie folgt aus:

[RoutePrefix("healthcheck")] 
public class HealthCheckController : ApiController 
{ 
    [HttpGet] 
    [ActionName("DefaultAction")] 
    public HttpResponseMessage GetHealthCheckStatus() 
    { 
     return Request.CreateResponse(HttpStatusCode.OK); 
    }  
} 

ich nicht statt Ok gefunden werden, wenn diese URL zu treffen. Jede mögliche Hilfe würde

UPDATE geschätzt werden Vielen Dank für alle Vorschläge, Ich habe sie alle und keiner arbeitet. Der Routen-Debugger zeigt keine Übereinstimmungen an. Ich halte das für eine Weile auf Eis.

Antwort

1

In Ihrem Startup.cs Register Attribut Routen:

config.MapHttpAttributeRoutes(); 

Und in der Steuerung:

[RoutePrefix("healthcheck")] 
public class HealthCheckController : ApiController 
{ 
    [HttpGet] 
    [Route] 
    public IHttpActionResult GetHealthCheckStatus() 
    { 
     return Ok(); 
    } 
} 
+0

Vielen Dank für Ihre Antwort, aber es funktioniert immer noch nicht. –

+0

Haben Sie die HealthCheck-Route von der 'HttpRouteCollection' entfernt? – peco

+0

Meinst du "config.Routes.MapHttpRoute (Name:" HealthCheck "...)? Ja tat ich. Es hat nicht geholfen –

2

dies in Config entfernen

config.Routes.MapHttpRoute(
    name: "HealthCheck", 
    routeTemplate: "healthcheck", 
    defaults: new { action =" DefaultAction" } 
); 

und diese

in Controller tun
public class HealthCheckController : ApiController 
{ 
    [AcceptVerbs("GET")] 
    [Route("healthcheck")] 
    public HttpResponseMessage GetHealthCheckStatus() 
    { 
     return Request.CreateResponse(HttpStatusCode.OK); 
    } 
} 
+0

Vielen Dank für Ihre Antwort. Aber es hat nicht geholfen –

+0

Es könnte ein Problem mit Ihren Konfigurationen geben \ –

1

Ich habe es nicht für Web-API getestet, aber es für MVC getestet, ich denke, es sollte das gleiche funktionieren.

In Route Registrierung Sie sollten sicherstellen, dass diese Route vor der Standard api Route kommt, weil Weg, um Angelegenheiten:

public static void RegisterRoutes(RouteCollection routes) { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      "HealthCheck", 
      "healthcheck", 
      new {Controller = "Default", action = "Index"} 
     ); 

     routes.MapRoute(
      "Default", 
      "{controller}/{action}/{id}", 
      new { 
       controller = "Home", 
       action = "Index", 
       id = UrlParameter.Optional 
      } 
     ); 
    } 

In der Steuerung Sie nicht die Controller und Aktionsnamen voranstellen können, aber korrekt zu spezifizieren Controller-Namen und Aktionsnamen in der Vorlage:

public class DefaultController : Controller 
{ 

    [HttpGet] 
    public ActionResult Index() 
    { 
     return Content("I'm hit"); 
    } 
} 

Wenn Sie noch Probleme haben, dann können Sie this article lesen und Routen Debuggen ermöglichen zu sehen, welche Route aufgerufen wird, und was sind die params.

+0

Vielen Dank für Ihre Antwort, es hat nicht funktioniert. –

+0

Wahrscheinlich ist in Ihrem Projekt etwas anderes nicht in Ordnung, das das Routing unbrauchbar macht. Ich würde vorschlagen, dass Sie ein kleines Projekt erstellen und überprüfen, ob Sie das Problem, das Sie dort beschrieben haben, reproduzieren können. Wenn ja - setzen Sie es hier, wenn nein - überprüfen Sie, was in Ihrem Code anders ist. – 3615

1

Da Sie Attribut-Routing aktivieren, können Sie die Aktion als Standard-Endpunkt für die RoutePrefix mit Controller angeben, indem [Route("")] mit leerer Route Vorlage.

[RoutePrefix("healthcheck")] 
public class HealthCheckController : ApiController { 
    [HttpGet] 
    [Route("")] // Matches GET http://mysite/healthcheck 
    public IHttpActionResult GetHealthCheckStatus() { 
     return Ok(); 
    } 
} 

Mit dem obigen dann gäbe es für den Convention-basierten Health Weg vom OP nicht notwendig sein. Es kann sicher von entfernt werden. WebApiConfig