簡體   English   中英

如何從HttpWebResponse創建ODataMessageReader?

[英]How do I create an ODataMessageReader from an HttpWebResponse?

我正在使用Microsoft.Data.OData庫,基本上想構造一個程序,該程序從OData查詢中獲取DataTable ,從中構造數據庫,然后插入記錄。

由於這是動態的,因此服務引用對我而言不起作用。

經過兩個小時的搜索和篩選有關MSDN的文檔后,我還沒有想出解決我的問題的方法。

到目前為止,我的代碼在下面,我只需要知道那里是否有人從HttpWebRequestODataReader或任何相關的類,這些類可以讓我在不編寫自己的解析器的情況下讀取查詢的結果以及它們的執行方式。

public class ODataPuller
{
    private readonly Uri uri;

    public ODataPuller(Uri uri)
    {
        this.uri = uri;
    }

    private async Task<HttpWebResponse> MakeRequestAsync(string filter)
    {
        filter = "?$filter=" + filter;
        Uri target = new Uri(this.uri, filter);

        HttpWebRequest request = HttpWebRequest.CreateHttp(target);
        request.Headers["Accept"] = "application/xml";

        HttpWebResponse response = await request.GetResponseAsync() as HttpWebResponse;
        return response;
    }

    public async Task<DataTable> GetDataTableAsync(string filter)
    {
        HttpWebResponse response = await this.MakeRequestAsync(filter);

        Stream stream = response.GetResponseStream();

        // Turn this stream into something nice
    }
}

使用ODataLib時,您需要自己實現一個消息接口(消息代表HTTP消息:流和標頭)。 讀取響應時,需要實現IODataResponseMessage,而編寫請求時,則需要實現IODataRequestMessage。

我們有一些用於HttpWebRequest和HttpWebResponse的示例消息實現,您可以在此處使用。 (我認為這些可能存在一些編譯問題,但解決起來並不難)

一旦有了消息實現,就可以將其傳遞給ODataMessageReader或ODataMessageWriter構造函數。 例如,

using (var messageReader = new ODataMessageReader(responseMessage, readerSettings, model))
{
   var feedReader = messageReader.CreateODataFeedReader(entityType, entitySet);
   while (feedReader.Read())
   {
       switch(feedReader.State)
       {
          case ODataReaderState.EntryEnd:
          {
             ODataEntry entry = (ODataEntry) feedReader.Item;
             // access entry.Properties, etc.
             break;
          }
       }
   }
}

有關使用該庫的文檔,您可以查看該使用庫的摘要以及我的ODataLib博客: http ://odata.jenspinney.com

暫無
暫無

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

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