AtomまたはRSSフィードを返すASP.NET Web APIアプリケーションを構築しています。これを行うには、System.ServiceModel.Syndication.SyndicationFeed
を作成し、SyndicationFeed
をAtom10FeedFormatter
またはRss20FeedFormatter
に変換し、その結果を応答ストリームにストリーミングすることで、HTTP受諾ヘッダーの処理を担当するカスタムMediaTypeFormatter
を作成します。ここまでは順調ですね。ODataクエリとASP.NET Web APIのIQueryable以外のタイプ
私のコントローラは、このようなものになります。
public class FeedController : ApiController { public HttpResponseMessage Get() { FeedRepository feedRepository = new FeedRepository(); HttpResponseMessage<SyndicationFeed> successResponseMessage = new HttpResponseMessage<SyndicationFeed>(feedRepository.GetSyndicationFeed()); return successResponseMessage; } }
私は何をしたいことを利用することであるが、内蔵のODataは、私のフィードをフィルタリングするために照会が、IQueryable<SyndicationFeed>
にGet()
メソッドの戻り値の型を変更SyndicationFeed
はIQueryable
を実装していないため、明らかに動作しません。
SyndicationFeed
のIEnumerable<SyndicationItem>
プロパティで、組み込みのODataクエリを使用する方法はありますか?
提案をお寄せいただきありがとうございますが、戻り値の型が間違っているので、それが動作しません:それは意志あなたのケースのためにhttps://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options
で チェック「を呼び出すクエリオプション直接」セクションは次のようになります。あなたの例では、IQueryableが必要ですが、IEnumerable を返すでしょう。 SyndicationFeedはIQueryableを実装していませんが、RSSまたはAtomフィードのエンベロープであるため、私はそれを破棄できません。問題は、返される型としてSyndicationFeedを保持したまま、IEnumerable をフィルタリングするODataクエリを取得するにはどうすればいいですか? –
'return syndicationItems.AsQueryable();' –