2012-02-22 26 views
9

Tôi đang cố gắng sử dụng phiên bản beta WebAPI mới để xây dựng dịch vụ web mà tôi có thể truy vấn bằng cách sử dụng OData query string conventions và trả lại OData formatted Json. Tôi cũng muốn sử dụng OData 2.0 (thay vì 1.0).API Web của Asp.Net MVC4 - Trả về Json có định dạng OData từ truy vấn mà không cần MediaTypeFormatter tùy chỉnh

Mặc dù có vẻ như nó không hỗ trợ tùy chọn $select và các tiêu đề dường như có thể ghi đè tùy chọn $format, trả về một số IQueryable chung dường như cung cấp hỗ trợ cho hầu hết các tùy chọn truy vấn khác mà tôi cần.

Điều tôi thực sự đấu tranh là cách tốt nhất để cung cấp các đối tượng Json đáp ứng đặc tả OData 2.0. WebAPI chỉ trả về dữ liệu Json bình thường khi được truy vấn. Ví dụ, nếu tôi thực hiện một yêu cầu GET của một cái gì đó như thế này ...

http://localhost:XXXXX/vendor/?$filter=RONUMBER eq '2597385'&$select=VENDORID,VENDORNAME&$top=1&$format=Json 

..to có được hit đầu phù hợp với các quy định RONumber trên máy dev của tôi, tôi nhận được một phản ứng có chứa các Json sau ...

[{"MEPartNumber":"11-2222-3-4444","MFGPartNumber":"123456-123","MFGSerialNumber":"ABC123","RONumber":"987654321","VendorId":"1234567","VendorName":"ACME SERVICE CENTER"}] 

Tôi cần Json đáp ứng thông số OData 2.0. Một cái gì đó giống như thế này ..

OData V2: { 
    "d" : { 
    "results": { 
     "__metadata": { 
      "uri": "http://someserver/foo/vendor(1)", 
      "type": "Vendor" 
     }, 
     "MEPartNumber": "11-2222-3-4444", 
     "MFGPartNumber": "123456-123", 
     "MFGSerialNumber": "ABC123", 
     "RONumber":"987654321", 
     "VendorId":"1234567", 
     "VendorName": "ACME SERVICE CENTER" 
    } 
    } 
} 

Tôi cho rằng tôi có thể viết tùy chỉnh MediaTypeFormatter để lấy cấu trúc mà tôi muốn. Tôi cũng có thể sửa đổi các đối tượng được trả về của tôi để bắt chước cấu trúc của Json mong muốn. Ngoài hai tùy chọn này, có ai biết cách thông minh để làm cho WebAPI cung cấp cho tôi các đối tượng Json định dạng OData 2.0 không?

Trả lời

5

Bạn cần viết MediaTypeFormatter của riêng mình để cung cấp tuần tự đúng. Chúng tôi đã không gửi một định dạng OData trong bản MVC 4 Beta, nhưng hóa thân trước đó của WCF Web Api có một số ví dụ về cách viết một. http://wcf.codeplex.com/SourceControl/list/changesets Tìm Microsoft.Net.Http.Formatting.OData (bạn sẽ có thể sử dụng hầu hết nguồn, mặc dù một số chi tiết triển khai có thể đã thay đổi)

Một giải pháp thay thế sẽ là cố gắng xây dựng một DTO sẽ tuần tự hóa với hình dạng được mong đợi bởi OData v2.

+0

OK. Cảm ơn thông tin, marcind. – racingcow

Các vấn đề liên quan