2013-03-25 7 views
5

Mam ODataController, który zwraca wartość PageResult.Jak mogę uniknąć 406 podczas odbierania OData.PageResult <T>?

Api Przykład:

public PageResult<Customer> Get(ODataQueryOptions options) { 
// cut some stuff out... 

    PageResult<Customer> result = new PageResult<Customer>(
     searchResults as IEnumerable<Customer>, 
     Request.GetNextPageLink(), 
     Request.GetInlineCount()); 
    return result; 

Kiedy debugowania to wydaje się być w porządku i mieć klasę PageResult zbudowany prawidłowo, aby powrócić. Na stronie internetowej ..

Web Przykład

using (var client = new HttpClient()) { 
    client.BaseAddress = new Uri(testURL); 
    string searchUrl = "api/customer?$top=1&$skip=0"; 
    client.DefaultRequestHeaders.Accept.Add(MediaTypeWithQualityHeaderValue.Parse("application/json;odata=verbose")); 
    HttpResponseMessage response = client.GetAsync(searchUrl).Result; 

Odpowiedź jest StatusCode 406, z powodu wyrażenia stwierdzającego treść była nie do przyjęcia. Robi to również, jeśli zdefiniuję nową MediaTypeWithQualityHeaderValue ("application/json").

Co muszę zmienić, aby pomyślnie wykorzystać tę api w kontrolerze przed przekazaniem go do widoku?

Odpowiedz

4

Myślę, że brakuje ci dwóch pierwszych kroków do zbudowania usługi OData. ODataController, jak sama nazwa wskazuje, działa tylko z trasami OData. Musisz zbudować model EDM reprezentujący twoją usługę OData i dodać trasę OData odsłaniającą ten model EDM. Zapoznaj się z tym official documentation i blogiem post, aby uzyskać szczegółowe informacje na temat tworzenia usług OData.