2013-10-21 24 views
11

在即将发布的项目中,我们希望使用ASP.NET WebAPI 2向我们的网站和浏览器客户端公开服务功能。任何方式为WebAPI项目生成C#HTTPClient包装器?

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

我正在寻找一些东西来帮助生成或支架C#“cli​​ent's”,它包装HTTPClient并提供强类型的“代理”。与通过“添加新服务引用”生成代理时的WCF类似。

我已阅读其他问题,询问类似的事情(如看到HERE),但想问一个更直接的问题,与MVC或测试问题无关。

+0

这是我一直在寻找最好的表示: http://www.faniereynders.com/2013/03/aspnet-web-api .html 希望这可能会出现在官方的方式后... – BoxOfNotGoodery

回答

1

我见过的提供简单易用的web api功能的最常见方式是定义主要类以及某些后期功能的程序集。该程序集使用JSON传输数据。

看看PayPal的集成API如何工作。从本质上讲,他们给你一个包含正在使用的各个类的定义的程序集。有一个类将数据传输到服务器。

这个想法是,客户不关心他们是如何与你进行实际交流的(全都在黑匣子里),但是他们可以选择使用预定义的类或者自己推出。

+0

我相信主要关注的是各种服务的相对uris和相应的方法之间的映射,以便与单一方法接受uris相比,当单个方法对应于单个api调用时,您可以获得大量方法。问题不在于这是否可行,显然这是因为这样的包装API可以很容易地手工编码,但是如何使用现有的方法自动生成它。 –

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

,但改变自己的错误处理等

3

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

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

enter image description here

+0

这看起来很有趣。添加VB支持有多难? – InteXX

+0

此功能没有计划,但有工具可以将c#转换为vb.net –

+0

我想,现在随着Roslyn的到来,这样的一个步骤甚至可以实现自动化。看起来你在这里建立的一个很好的工具 - 保持良好的工作。 – InteXX