2014-06-18 5 views
1

.NET 4.5를 사용하는 OData 웹 API 서비스가 있습니다.OData 쿼리 결과에서 다음 링크를 수정하는 방법

: 당신이 볼 수 있듯이, 나는 100 개 이상의 개체가있는 경우 (100)에 서버 측 페이지 크기를 설정
public class WorkItemsController : EntitySetController<WorkItem, string> 
{ 
    [Queryable(PageSize=100)] 
    public override IQueryable<WorkItem> Get() 
    { 
     // go to AWS DynamoDb, get the workitems and then return 
    } 
} 

가 반환 같은 링크를 포함합니다 : 그것은 EntitySetController에서 파생 된 WebApi 컨트롤러가
<link rel="next" href="http://***/api/v1/WorkItems?$skip=100" /> 

Microsoft SQL에서는 정상적으로 작동합니다. 하지만 DynamoDb를 사용하고 있습니다. "skip = 100"은 DynamoDb LastEvaluatedKey로 변환 할 수 없습니다. 그래서 여기에 다음 링크를 수정하여 LastEvaluatedKey를 반환합니다.

<link rel="next" href="http://***/api/v1/WorkItems?$skip=A12BSD123" /> 

기본적으로 링크를 사용자 정의 할 수있는 기능이 필요합니다. 따라서 사용자가 다음 세트를 가져 오려면이 링크를 사용해야하고 LastEvaluatedKey를 얻을 수 있습니다.

답변

3

아래처럼 ODataQueryOptions을 적용한 후 요청의 ODataProperties의 넥스트 링크를 설정할 수 있습니다 귀하의 제안에 대한

public class WorkItemsController : EntitySetController<WorkItem, string> 
{ 
    public override IQueryable<WorkItem> Get(ODataQueryOptions queryOptions) 
    { 
     // go to AWS DynamoDb, get the workitems and then return 
     IQueryable workitems = ....; 
     var settings = new ODataQuerySettings { PageSize = 100 }; 
     workitems = queryOptions.ApplyTo(workitems, settings); 

     // Override the NextLink here 
     // Get or Set Request.ODataProperties().NextLink 
    } 
} 
+0

하이 펭, 감사합니다. 하지만 요청에서 ODataProperties()를 찾지 못했습니다. OData 5.6을 사용하고 있습니다. – maomao

+2

네임 스페이스가 "System.Web.Http.OData.Extensions"인 확장 방법입니다. –