Могу ли я использовать веб-API из веб-приложения в качестве справочной службы? - PullRequest
1 голос
/ 07 марта 2019

Можно ли добавить в качестве ссылки и вызвать методы контроллера API в качестве службы в другом проекте?Какие есть альтернативы, если это невозможно?

Ответы [ 2 ]

1 голос
/ 07 марта 2019

Типы приложений Web API больше не имеют «ссылки на сервис». Они не создают WSDL, поэтому вы не можете добавить их, как вы это делали с SOAP-сервисами. Никакие прокси-классы не генерируются ... нет intelli-sense.

Веб-API обычно вызываются с облегченными запросами http и возвращают JSON, а не ответы SOAP на основе XML, такие как традиционные сервисы ASMX или SVC (WCF).

Я верю, у вас есть кое-что почитать.

Чтобы ответить на ваш вопрос, вы МОЖЕТЕ действительно вызывать службы API из веб-приложения (например, метод контроллера в приложении MVC), но у вас не будет прокси-классов, чтобы помочь вам.

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

0 голосов
/ 08 марта 2019

Когда вы создаете ссылку на службу, вы в итоге получаете ссылку на интерфейс и клиентский класс, который реализует интерфейс.

Вы можете следовать почти такой же схеме без ссылки на службу 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 в класс, который реализует ваш собственный интерфейс, предоставляя вам контроль над интерфейсом, от которого вы зависите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...