在即将开展的项目中,我们希望使用ASP.NET WebAPI 2向我们的网站和浏览器客户端公开服务功能。
由于我们希望尽可能少的“终点”尽可能地让所有呼叫,甚至“内部”从WebAPI Web服务中消耗我们的服务器。 (即不只是直接新建控制器实例)
我正在寻找帮助生成或支持C#“客户端”的东西,它包装HTTPClient并提供强类型的“代理”。与通过“添加新服务引用”生成代理时的WCF类似。
我已经阅读了其他类似问题的问题(如HERE所示),但想要提出一个与MVC或测试问题无关的更直接的问题。
答案 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
答案 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());
}
但要改变自己的错误处理等等。