寻找客户端Json / WebAPI包来发送HttpGet / HttpPost消息

时间:2019-04-05 14:04:32

标签: c# .net asp.net-web-api client .net-standard

背景 目前,我正在开发一个基于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请求。

我在哪里 我已经写了很多基于纯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路径的组装是我的主要问题。它看起来太容易出错。 / p>

    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对象。

1 个答案:

答案 0 :(得分:1)

如果这与您的用例不符,则准备在此处遭到抨击,但看起来TheMovieDb网站本身具有客户端库列表。在这里可用:https://www.themoviedb.org/documentation/api/wrappers-libraries。它们显然比您在这里要的要高,因为它们完全包装了API,因此您甚至不需要知道自己在调用什么或如何调用它,而是为了获得完成工作后,他们似乎可以解决问题。