有没有为WebAPI项目生成C#HTTPClient包装器的方法?

时间:2013-10-21 16:32:09

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

在即将开展的项目中,我们希望使用ASP.NET WebAPI 2向我们的网站和浏览器客户端公开服务功能。

由于我们希望尽可能少的“终点”尽可能地让所有呼叫,甚至“内部”从WebAPI Web服务中消耗我们的服务器。 (即不只是直接新建控制器实例)

我正在寻找帮助生成或支持C#“客户端”的东西,它包装HTTPClient并提供强类型的“代理”。与通过“添加新服务引用”生成代理时的WCF类似。

我已经阅读了其他类似问题的问题(如HERE所示),但想要提出一个与MVC或测试问题无关的更直接的问题。

4 个答案:

答案 0 :(得分:9)

这是我所寻找的最佳代表:

http://reynders.co/2013/03/10/creating-a-proxy-for-aspnet-web-api-t4 http://reynders.co/2014/01/16/introducing-webapiproxy-providing

他将他的示例代码放在github上:

https://github.com/faniereynders/WebAPIProxy

希望这可能会在以后以官方的方式出现。

答案 1 :(得分:4)

我目前正在开发.NET的开源Swagger工具链。使用这些工具,您可以从现有DLL中选择Web API控制器,并为C#和TypeScript生成Swagger规范或客户端代码。在Visual Studio中使用T4模板,生成过程就像WCF服务引用一样。

看看这里:http://NSwag.org

enter image description here

答案 2 :(得分:1)

我见过的最常见的提供易于使用的web api功能的方法是使用一个程序集来定义主要类以及一些帖子功能。该程序集使用JSON传输数据。

了解PayPal的集成API如何运作。本质上,它们为您提供了一个程序集,其中包含所使用的各种类的定义。有一个类用于将数据传输到服务器。

这个想法是客户不关心他们实际上是如何与你沟通的(所有这些都在黑匣子里)但是他们可以选择使用预定义的类或自己动手。

答案 3 :(得分:1)

我说你真的不需要一个完整的库来访问数据;如果您在公共库中定义了数据对象,则可以使用通用帮助程序方法执行类似

的操作
    public static TItem GetItem<TItem>(this HttpClient httpClient, string queryString) where TItem : class
    {
        var response = httpClient.GetAsync(queryString).Result;
        if (response.IsSuccessStatusCode)
        {
            return response.Content.ReadAsAsync<TItem>().Result;
        }

        throw new HttpRequestException(response.ToString());
    }

但要改变自己的错误处理等等。