簡體   English   中英

ASP.NET Web API中除IQueryable之外的OData查詢和類型

[英]OData queries and types other than IQueryable in ASP.NET Web API

我正在構建一個返回Atom或RSS提要的ASP.NET Web API應用程序。 為此,它構建一個System.ServiceModel.Syndication.SyndicationFeed並且自定義MediaTypeFormatter負責處理HTTP Accept Header,將SyndicationFeed轉換為Atom10FeedFormatterRss20FeedFormatter ,並將結果傳輸到響應流。 到現在為止還挺好。

我的控制器看起來像這樣:

public class FeedController : ApiController
    {
        public HttpResponseMessage Get()
        {
            FeedRepository feedRepository = new FeedRepository();
            HttpResponseMessage<SyndicationFeed> successResponseMessage = new HttpResponseMessage<SyndicationFeed>(feedRepository.GetSyndicationFeed());
            return successResponseMessage;
        }
    }

我想要做的是使用內置的OData查詢來過濾我的Feed,但是將Get()方法的返回類型更改為IQueryable<SyndicationFeed>顯然不起作用,因為SyndicationFeed沒有實現IQueryable

有沒有辦法使用內置的OData的查詢方式IEnumerable<SyndicationItem>的財產SyndicationFeed

此問題已不再適用,因為Microsoft刪除了對Web API的Beta版本中的OData查詢的基本支持。

未來版本將包括更完整的OData支持。 可通過CodePlex和NuGet進行早期構建,此處有更多詳細信息: http//blogs.msdn.com/b/alexj/archive/2012/08/15/odata-support-in-asp-net織網,api.aspx

System.Linq命名空間為IEnumerable接口提供名為AsQueryable的擴展方法。 你的代碼看起來像這樣:

public class FeedController : ApiController
{
    public IQueryable<SyndicationFeed> Get()
    {
        FeedRepository feedRepository = new FeedRepository();

        //TODO: Make sure your property handles empty/null results:
        return feedRepository.GetSyndicationFeed()
                   .YourEnumerableProperty.AsQueryable();
    }
}

使用OData時,您不必從控制器返回IQuerable。 檢查“直接調用查詢選項”部分, 網址https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/supporting-odata-query-options

對於您的情況,它看起來像:

public SyndicationFeed Get(ODataQueryOptions<SyndicationItem> opts)
{
    var settings = new ODataValidationSettings();

    opts.Validate(settings);

    SyndicationFeed result = feedRepository.GetSyndicationFeed();

    result.Items = opts.ApplyTo(result.Items.AsQuerable()).ToArray();

    return result;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM