是否可以添加作为引用并在另一个项目上将API控制器方法作为服务调用?如果不可能的话,还有哪些选择呢?
答案 0 :(得分:1)
Web API类型的应用程序不再具有“服务参考”。它们不会产生WSDL,因此您不能像以前使用SOAP服务那样添加它们。没有生成代理类...没有智能感知。
通常使用轻量级的HTTP请求调用Web API,并返回JSON而不返回基于XML的SOAP响应,例如传统的ASMX或SVC(WCF)服务。
我相信您需要阅读一些东西。
要回答您的问题,您确实可以从Web应用程序(例如MVC应用程序中的控制器方法)调用API服务,但没有代理类可以帮助您。
答案 1 :(得分:0)
创建服务引用时,最终会得到对接口的引用以及实现该接口的客户端类。
如果没有WCF服务参考,您可以遵循几乎相同的模式。实际上,这是依赖接口的好处之一。对于您的应用程序来说,实现是对WCF服务,API还是其他任何调用都无所谓。
首先声明一个接口,该接口描述您将如何与API交互。
public interface ISomethingService
{
public SomeData GetSomeData(string id);
}
该接口是您其他类所依赖的。他们永远不会知道实现是什么。
您的实现可能是这样的。我正在使用RestSharp创建API客户端,因为与管理HttpClient
相比,我更喜欢它:
public class SomethingServiceApiClient : ISomethingService
{
private readonly string _baseUrl;
public SomethingServiceApiClient(string baseUrl)
{
_baseUrl = baseUrl;
}
public SomeData GetSomeData(string id)
{
var client = new RestClient(_baseUrl);
var request = new RestRequest($"something/{id}", Method.POST);
var response = client.Execute<SomeData>(request);
return response.Data;
}
}
在启动时,您需要将该类注册为ISomethingService
的实现,并从配置中传递基本URL。如果需要的话,这还允许您传递不同的URL进行开发,生产等。
最终,这与依赖WCF服务没有什么不同。一个区别是WCF服务定义了一个接口,但是在这种情况下,您必须这样做。这实际上是一件好事,因为最好是让您的应用程序定义自己的接口,而不是直接依赖于其他人提供的接口。您可以将其接口或API包装在实现自己的接口的类中,从而使您可以控制所依赖的接口。