2

WebApi에 http://attributerouting.net/ 누 겟 패키지를 사용하고 있습니다. 특성 라우팅 제한 경로

[GET("api/products/{tenantid}/{channelid}?{skip=0}&{take=20}&{status=1}")] 
public IEnumerable<Product> Get(short tenantId, byte channelId, int status, int skip, int take) 

[GET("api/products/{tenantid}/{channelid}/{id}")] 
public Story Get(short tenantId, byte channelId, long id) 

그러나 생성 된 도움말에 URI

는 세 GET 옵션이 표시됩니다 : 여기 내 두 GET 방법과 경로 속성 목록 및 특정 항목입니다.

GET api/products/{tenantid}/{channelid}?status={status}&skip={skip}&take={take} 
GET api/products/{tenantid}/{channelid}?id={id} 
GET api/products/{tenantid}/{channelid}/{id} 

"id"가 첫 번째 GET 메서드의 매개 변수가 아니지만. 마지막에 "? id = {id}"가있는 가운데 URI를 어떻게 제거합니까? 나는 어떤 종류의 제약이 필요하다고 생각하지만, 문서화 사이트에서 그것을 이해할 수는 없다.

답변

2
  1. 문제를 해결하려면 작업의 이름을 다르게 지정할 수 있습니다. 예 : GetAllProducts, GetProduct

  2. ApiExplorer (HelpPage 사용)는 경로 컬렉션 내의 모든 경로를 방문하고 각 경로에 대해 해당 경로에서 어떤 작업에 도달 할 수 있는지 확인하기 때문에 예상되는 동작입니다. 위의 속성 장식 된 경로를 사용하면 경로 컬렉션의 경로는 다음과 같습니다.

a. "API/제품/{tenantid}/{channelid}", 컨트롤러 = "제품", 동작 = "가져 오기"등 ...

b.

라우트 'a.'에 대해 ApiExplorer는 어떤 액션이 다음 작업을 수행 할 수 있는지를 확인합니다 : "api/products/{tenantid}/{channelid}/{id}"컨트롤러 = "제품" 도달 할 것이고 컨트롤러 'Products'와 액션 'Get'에 대해 도달 할 수있는 액션이 ​​2 개 있으며 경로 경로 자체에서 오는 매개 변수의 수를 확인하고 해당 매개 변수가 액션 경로 경로에서 오지 않는 경우 쿼리 문자열에서 오는 것으로 가정합니다. 따라서 "? id = {id}"가 표시됩니다. 희망이 도움이됩니다.

+0

그걸 수정했습니다. 메서드 이름을 변경하는 것에 대해서 생각조차하지 않았습니다. 대안 라우팅 기술로 전환 할 때 메소드 이름이 라우팅 규칙의 일부가 아니 었음을 인식해야합니다. – Dzejms