Tôi đang xây dựng một ứng dụng ASP.NET Web API trả về một nguồn cấp dữ liệu Atom hoặc RSS. Để làm điều này, nó xây dựng một System.ServiceModel.Syndication.SyndicationFeed
và tùy chỉnh MediaTypeFormatter
chịu trách nhiệm xử lý Tiêu đề chấp nhận HTTP, chuyển đổi SyndicationFeed
thành số Atom10FeedFormatter
hoặc Rss20FeedFormatter
và truyền trực tuyến kết quả đến luồng phản hồi. Càng xa càng tốt.Truy vấn OData và các loại khác với IQueryable trong ASP.NET Web API
điều khiển của tôi trông giống như sau:
public class FeedController : ApiController { public HttpResponseMessage Get() { FeedRepository feedRepository = new FeedRepository(); HttpResponseMessage<SyndicationFeed> successResponseMessage = new HttpResponseMessage<SyndicationFeed>(feedRepository.GetSyndicationFeed()); return successResponseMessage; } }
Những gì tôi muốn làm là tận dụng được xây dựng trong OData truy vấn để lọc thức ăn của tôi, nhưng thay đổi kiểu trả về của phương pháp Get()
-IQueryable<SyndicationFeed>
rõ ràng sẽ không hoạt động kể từ khi SyndicationFeed
không triển khai IQueryable
.
Có cách nào để sử dụng truy vấn OData tích hợp trên thuộc tính IEnumerable<SyndicationItem>
trên SyndicationFeed
không?
Cảm ơn đã gợi ý nhưng điều đó sẽ không làm việc vì kiểu trả về là sai. Trong ví dụ của bạn, nó đang mong đợi một IQueryable nhưng bạn sẽ trả về một IEnumerable. SyndicationFeed không triển khai IQueryable nhưng tôi không thể loại bỏ nó vì nó là phong bì cho nguồn cấp dữ liệu RSS hoặc Atom của tôi. Câu hỏi là, làm thế nào để tôi nhận được truy vấn OData để lọc IEnumerable trong khi vẫn giữ SyndicationFeed làm kiểu trả về của tôi? –
'return syndicationItems.AsQueryable();' –