-1

如何在ASP.NET Web API中將路由配置爲使用GET方法將其路由到控制器中的特定方法?ASP.NET Web API 2自定義路由到特定方法

http://mysite/healthcheck

登記WebAPiConfig看起來是這樣的:

config.MapHttpAttributeRoutes(); 

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

控制器看起來是這樣的:

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

打的是URL,當我沒有發現,而不是確定。任何幫助,將不勝感激

UPDATE 謝謝你的所有建議,我檢查了他們都沒有工程。路由調試器顯示沒有匹配。我擱置一會兒。

回答

1

在你Startup.cs寄存器屬性路線:

config.MapHttpAttributeRoutes(); 

和Controller:

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

謝謝你的回答,但它仍然無法正常工作。 –

+0

您是否從'HttpRouteCollection'中刪除了HealthCheck路線? – peco

+0

你的意思是「config.Routes.MapHttpRoute(name:」HealthCheck「...)嗎?是的,我沒有幫助 –

2

在配置

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

刪除這一點,並在控制器做到這一點

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

謝謝你的回答。但它沒有幫助 –

+0

您的配置可能存在一些問題\ –

1

我還沒有測試它的web-api,但測試它的MVC,我認爲它應該工作相同。

在路線註冊,你應該確保,這條路線來規範API路線之前,因爲路線順序事項:

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 
      } 
     ); 
    } 

在控制器,你可能不前綴的控制器和動作名稱,而是指定了正確的控制器名稱和動作名稱模板:

public class DefaultController : Controller 
{ 

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

如果您仍然有問題,那麼你可以閱讀this article並啓用路由調試也看哪個路線調用,什麼是PARAMS。

+0

謝謝你的回答,它沒有奏效。 –

+0

在您的項目中可能會出現其他問題,導致路由變得瘋狂。我建議你創建一個小型項目,並檢查是否可以重現你在那裏描述的問題。如果是的話 - 把它放在這裏,如果不是的話 - 檢查你的代碼有什麼不同。 – 3615

1

由於您正在啓用屬性路由,因此您可以使用RoutePrefix通過使用[Route("")]以及空路由模板,將操作指定爲控制器的默認端點。

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

通過以上那麼就沒有必要從OP基於慣例,健康檢查路線。它可以安全地從WebApiConfig