簡體   English   中英

尋找客戶端Json / WebAPI包發送HttpGet / HttpPost消息

[英]Looking for client side Json/WebAPI package to send HttpGet/HttpPost messages

背景技術目前,我在一個副項目中,在該項目中,我正在構建基於Xamarin的移動應用程序,以根據用戶的喜好(例如,基於電影類型等)輕松地進行電影和電視節目的搜索和導航。

為此,移動應用程序充當https://www.themoviedb.org/documentation/api在線電影數據庫的Web API服務的客戶端。

問題我正在尋找一個易於使用且受到良好支持的軟件包,用於將API Uri路徑和查詢參數包裝到Web api查詢中。 我對RestSharp有點了解。

我非常喜歡基於模式的查詢路徑的語法:

var request = new RestRequest("resource/{id}"); 
request.AddParameter("name", "value");
request.AddUrlSegment("id", "123"); 

但我不確定軟件包的未來。 另外,如果還有MS的替代方案,我會接受。

因此,也已經查看了針對MS替代產品量身定制的Web-API,但是我不確定那里推薦什么。 我只能找到服務器端(ASP.NET CORE MVC)的文檔和示例。

我需要指出的是Microsoft或第三方提供的功能良好的.NET Standard 2.0軟件包,用於從Xamarin客戶端發送Web API請求。

II在哪里已經編寫了很多基於純HttPClient和AspNetcore.WebUtilituies的代碼來組裝查詢字符串。 但是,成千上萬的API路徑段已經無法控制。 我真的需要像RestSharp這樣的東西來管理API路徑模板

代碼示例:

在這里,我聲明了我手動組裝的所有路徑段==>丑陋的AF

public static class WebApiPathConstants
{
public const string BASE_Address = "https://api.themoviedb.org";
public const string BASE_Path = "/3";
public const string CONFIG_Path = "/configuration";
public const string GENRE_LIST_Path = "/genre/movie/list";
...
lot of lines here
....
public const string PAGE_Key = "page";
public const string INCLUDE_Adult_Key = "include_adult";
public const string API_KEY_Key = "api_key";
public const string RECOMMENDATIONS_Path = "/recommendations";
public const string SIMILARS_Path = "/similar";
}

在這里,我組裝一個查詢並執行一個任務,以基於來自服務器的查詢來獲取電影詳細信息: Url路徑的組裝是我的主要問題。 看起來太容易出錯。

    public async Task<FetchMovieDetailsResult> FetchMovieDetails(int id, string language = null, int retryCount = 0, int delayMilliseconds = 1000)
    {
        string baseUrl = BASE_Address + BASE_Path + MOVIE_DETAILS_Path + "/" + id;

        var query = new Dictionary<string, string>();
        query.Add(API_KEY_Key, apiKeyValue);

        if (!string.IsNullOrEmpty(language))
            query.Add(LANGUAGE_Key, language);

        string requestUri = QueryHelpers.AddQueryString(baseUrl, query);

        FetchMovieDetailsResult result = await GetResponse<FetchMovieDetailsResult>(retryCount, delayMilliseconds, requestUri);

        return result;
    }

結果是帶有HttpStatusCode和Json對象(如果成功)的POCO類。 客戶端僅在StatusCode == 2xx時訪問Json對象。

如果這與您的用例不符,則准備在此處遭到抨擊,但看起來TheMovieDb站點本身具有客戶端庫列表。 可以在這里找到: https : //www.themoviedb.org/documentation/api/wrappers-libraries 它們顯然比您在這里要的要高,因為它們完全包裝了API,因此您甚至不需要知道自己在調用什么或如何調用它,而是為了獲得工作完成后,他們似乎可以解決問題。

暫無
暫無

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

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