【问题标题】:Any way to generate a C# HTTPClient wrapper for a WebAPI project? [closed]有什么方法可以为 WebAPI 项目生成 C# HTTPClient 包装器? [关闭]
【发布时间】:2013-10-21 16:32:09
【问题描述】:

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

由于我们希望尽可能少的“端点”,我们希望所有调用,甚至是“内部”调用都从 WebAPI Web 服务使用我们的服务器。 (即不只是直接新建控制器实例)

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

我读过其他类似问题的问题(如 HERE 所示),但想问一个与 MVC 或测试问题无关的更直接的问题。

【问题讨论】:

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


【解决方案1】:

这是我正在寻找的最好的代表:

ASP.NET Web API <#= Proxy to T4 #>

Introducing WebApiProxy: Providing JavaScript & C# proxies with Intellisense including documentation for ASP.NET Web API

他把他的示例代码放到了github上:

https://github.com/RestCode/WebApiProxy

希望以后能以官方方式发布。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 这看起来很有趣。添加 VB 支持有多难?
    • 没有计划这个功能,但是有工具可以将c#转换为vb.net
    • 我想,现在随着 Roslyn 的出现,这样的步骤甚至可以自动化。看起来像您在这里构建的一个很好的实用程序 - 继续努力。
    【解决方案3】:

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

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

    这个想法是,客户并不关心他们实际上是如何与您交流的(这一切都在黑匣子中),但是他们可以选择使用预定义的类或滚动他们自己的类。

    【讨论】:

    • 我相信主要关注的是各种服务的相对 uris 和相应方法之间的映射,因此当一个方法对应于一个方法时,而不是一组接受 uris 的通用方法你得到一大堆方法单个 api 调用。问题不在于这是否可能,显然这样的包装 api 可以很容易地手动编码,而是如何使用现有方法自动生成它。
    【解决方案4】:

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

        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());
        }
    

    但为您自己的错误处理等进行更改。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-03-12
      • 2018-06-15
      • 2017-02-22
      • 2014-08-14
      • 2019-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多