我可以使用Web应用程序中的Web API作为服务参考吗?

时间:2019-03-07 20:32:26

标签: c# .net asp.net-mvc-5

是否可以添加作为引用并在另一个项目上将API控制器方法作为服务调用?如果不可能的话,还有哪些选择呢?

2 个答案:

答案 0 :(得分:1)

Web API类型的应用程序不再具有“服务参考”。它们不会产生WSDL,因此您不能像以前使用SOAP服务那样添加它们。没有生成代理类...没有智能感知。

通常使用轻量级的HTTP请求调用Web API,并返回JSON而不返回基于XML的SOAP响应,例如传统的ASMX或SVC(WCF)服务。

我相信您需要阅读一些东西。

要回答您的问题,您确实可以从Web应用程序(例如MVC应用程序中的控制器方法)调用API服务,但没有代理类可以帮助您。

https://docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/calling-a-web-api-from-a-net-client

答案 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包装在实现自己的接口的类中,从而使您可以控制所依赖的接口。