2014-12-16 5 views
8

WebApi Katana 애플리케이션에서 라우팅을 사용하고 있습니다. 나는 잘 작동하는 다음의 두 경로 매핑을 가지고있다. 내 질문은 선택적 매개 변수를 사용하여 단일 경로 매핑에 결합 할 수 있습니까? 나는 그것을 할 수있는 명확한 방법을 볼 수없고 필요한 기능을 유지할 수 없습니다. 나는 이것에 익숙하지 않고, 이것을 달성하는데 도움이되는 기술을 놓칠지도 모른다. 경로가이 길을 유지해야한다면 문제가되지 않습니다.WebApi에서 경로 매핑 결합하기

 config.Routes.MapHttpRoute(
      name: "UnRegister", 
      routeTemplate: "api/services/{serviceName}/{location}", 
      defaults: new {controller = "MyController", location = RouteParameter.Optional}); 

     config.Routes.MapHttpRoute(
      name: "UnRegister2", 
      routeTemplate: "api/services/{serviceName}/{instanceId}", 
      defaults: new { controller = "MyController" }); 

필요한 기능은 다음과 같은 세부 사항 제공하여 서비스 등록을 취소하는 것입니다

Servicename 
Servicename and location 
Servicename and instanceId 

답변

11

ASP.NET 웹 API에서 당신이 라우팅을 속성 사용할 수있는 2을 당신은 정의 할 필요가 없습니다 그런 모든 경로는 MapHttpRoute입니다.

설명은 here입니다.

public class Startup 
{ 
    public static void Configuration(IAppBuilder app) 
    { 
     // Configure Web API for self-host. 
     HttpConfiguration config = new HttpConfiguration(); 

     // Enable attribute based routing 
     config.MapHttpAttributeRoutes(); 

     app.UseWebApi(config); 

    } 
} 

및 컨트롤러를 모양은 다음과 같습니다 : 당신이 MapHttpAttributeRoutes 사용하여 라우팅 속성을 활성화해야 Startup 당신의 Owin에서

[RoutePrefix("api/service")] 
public class ServicesController : ApiController 
{ 
    [HttpGet] 
    [Route("{location}")] 
    public IHttpActionResult GetByLocation(string location) 
    { 
     return Ok(); 
    } 

    [HttpGet] 
    [Route("{instanceId:int}")] 
    public IHttpActionResult GetByInstanceId(int instanceId) 
    { 
     return Ok(); 
    } 
} 

내가 RuotePrefix를 사용했습니다 볼 수 있듯이 기사에 제안 된대로 매개 변수를 제한하기 위해 엔드 포인트 및 라우트 제한 조건을 디바이스에 보냅니다. 사용자 지정 제약 조건을 직접 만들 수도 있습니다.

이 문서에서는 NuGet 패키지 Microsoft.AspNet.WebApi.WebHost을 설치해야한다고 제안합니다. 그럴 필요는 없습니다.