Rest client для windows

Postman REST Client

Send requests, inspect responses, and easily debug REST APIs.

Send Requests and View Responses

Use Postman as a REST client to create and execute queries. (Postman also works with SOAP and GraphQL.)

Define complex requests

Send any type of request in Postman. Create and save custom methods and send requests with the following body types:

URL-encoded—The default content type for sending simple text data

Multipart/form-data—For sending large quantities of binary data or text containing non-ASCII characters

Raw body editing—For sending data without any encoding

Binary data—For sending image, audio, video, or text files

Get up and running in seconds

Instead of creating calls manually to send over the command line, all you need is a Postman Collection. Import a collection directly or generate one with one click from:

An API schema in the RAML, WADL, OpenAPI, or GraphQL format

A data file containing the cURL commands

Inspect Responses

View the status code, response time, and response size. Postman’s automatic language detection, link and syntax highlighting, search, and text formatting make it easy to inspect the response body.

Visualize Your Data

Easily turn API data into charts and graphs with Postman Visualizer.

Utilize powerful, simple visualizations

Go beyond parsing API JSON or XML responses. API consumers can get more from API data by taking advantage of prebuilt charts and graphs.

Build your own

Developers can harness HTML5, JavaScript, and CSS or bring in many of the available charting and graphing libraries to create rich visualizations.

Share with your team

Visualizations can easily be shared with others utilizing Postman Collections.

Built-In Support for Variables

Keep your code and requests DRY by reusing values in multiple places with variables.

Create variables in multiple scopes

Store values at the workspace level («globals»), at the environment, and at the collection level. Add variables to the URL, URL parameters, headers, authorization, request body and header presets directly in Postman.

Quickly make requests to different environments

Use environments to easily switch between different setups without changing your requests. Just select the appropriate environment to update your variable values.

Use session variables to keep information secure

Manage sensitive data like API keys by storing them in session variables that remain local to your machine and are never synced to your team.

Manage Authentication

Postman lets you access APIs no matter the authentication protocol backing it.

Support for multiple protocols

Postman provides built-in support authentication protocols, including OAuth 2.0, AWS Signature, Hawk Authentication, and more.

Manage cookies

Capture cookies returned by the server when making a request and save them for reuse in later requests. You can also create custom domains and add cookies to them.

Manage Certificates

View and set SSL certificates on a per domain basis. Once a client certificate has been added, it will automatically be sent with any future request to that domain sent over HTTPS. Postman supports:

SSL certificate validation

Custom root CA Certificate support

Client certificate support

More than Just a REST Client

Postman is packed with features that make it a powerful tool for API exploration and development.

Generate code snippets

Generate code snippets from your requests in a variety of frameworks and languages that you can use to make the same requests from your own application.

Keep track of request history

Postman stores all requests you send in the «History» tab, allowing you to experiment with variations of requests quickly without wasting time building a request from scratch.

Write tests in the Postman Sandbox

Use test and pre-request scripts to add dynamic behavior to requests and collections. This allows you to write test suites, build requests that can contain dynamic parameters, pass data between requests, and more.

Клиент REST REST client

Это руководство раскроет для вас некоторые возможности .NET Core и языка C#. This tutorial teaches you a number of features in .NET Core and the C# language. Вы познакомитесь со следующими аспектами: You’ll learn:

  • Общие сведения о .NET Core CLI. The basics of the .NET Core CLI.
  • обзор возможностей языка C#; An overview of C# Language features.
  • управление зависимостями с помощью NuGet; Managing dependencies with NuGet
  • взаимодействие по протоколу HTTP; HTTP Communications
  • обработка информации в формате JSON; Processing JSON information
  • управление конфигурацией с помощью атрибутов. Managing configuration with Attributes.

Вам предстоит создать приложение, которое отправляет запросы HTTP к службе REST на GitHub. You’ll build an application that issues HTTP Requests to a REST service on GitHub. Вы будете считывать данные в формате JSON и преобразовывать полученный пакет JSON в объекты C#. You’ll read information in JSON format, and convert that JSON packet into C# objects. И наконец, вы увидите примеры работы с объектами C#. Finally, you’ll see how to work with C# objects.

В этом руководстве описано множество функций. There are many features in this tutorial. Попробуем собрать их по одному. Let’s build them one by one.

Если вы хотите работать с готовым примером кода для этой статьи, можете скачать его. If you prefer to follow along with the final sample for this article, you can download it. Инструкции по загрузке см. в разделе Просмотр и скачивание примеров. For download instructions, see Samples and Tutorials.

Предварительные требования Prerequisites

Компьютер должен быть настроен для запуска .NET Core. You’ll need to set up your machine to run .NET core. Инструкции по установке см. на странице скачиваемых файлов .NET Core. You can find the installation instructions on the .NET Core Downloads page. Это приложение можно запустить в ОС Windows, Linux, macOS или в контейнере Docker. You can run this application on Windows, Linux, or macOS, or in a Docker container. Вам потребуется редактор кода, но вы можете выбрать любой привычный для вас. You’ll need to install your favorite code editor. В примерах ниже используется кроссплатформенный редактор Visual Studio Code с открытым исходным кодом. The descriptions below use Visual Studio Code, which is an open source, cross platform editor. Вы можете заменить его на любое другое средство, с которым вам удобно работать. However, you can use whatever tools you are comfortable with.

Создание приложения Create the Application

Первым шагом является создание нового приложения. The first step is to create a new application. Откройте командную строку и создайте новый каталог для приложения. Open a command prompt and create a new directory for your application. Перейдите в этот каталог. Make that the current directory. Введите следующую команду в окне консоли: Enter the following command in a console window:

Читайте также:  Check system performance windows

Эта команда создает начальный набор файлов для базового приложения Hello World. This creates the starter files for a basic «Hello World» application. Имя проекта — «WebAPIClient». The project name is «WebAPIClient». Так как это новый проект, зависимостей нет на месте. As this is a new project, none of the dependencies are in place. При первом запуске будет скачана платформа .NET Core, установлен сертификат разработки и запущен диспетчер пакетов NuGet для восстановления отсутствующих зависимостей. The first run will download the .NET Core framework, install a development certificate, and run the NuGet package manager to restore missing dependencies.

Прежде чем вносить изменения, перейдите в каталог «WebAPIClient» с помощью команды cd и введите dotnet run (см. примечание) в командной строке, чтобы запустить приложение. Before you start making modifications, cd into the «WebAPIClient» directory and type dotnet run (see note) at the command prompt to run your application. dotnet run автоматически выполняет dotnet restore при отсутствии зависимостей в вашей среде. dotnet run automatically performs dotnet restore if your environment is missing dependencies. Он также выполнит dotnet build , если приложение необходимо пересобрать. It also performs dotnet build if your application needs to be rebuilt. После первоначальной настройки будет достаточно запуска dotnet restore или dotnet build , когда это имеет смысл для вашего проекта. After your initial setup, you will only need to run dotnet restore or dotnet build when it makes sense for your project.

Добавление новых зависимостей Adding New Dependencies

Одна из важнейших миссий .NET Core — снизить размер установки .NET. One of the key design goals for .NET Core is to minimize the size of the .NET installation. Если для каких-то задач приложению нужны дополнительные библиотеки, добавляйте их в качестве зависимостей в файл проекта C# (*.csproj). If an application needs additional libraries for some of its features, you add those dependencies into your C# project (*.csproj) file. В нашем примере нужно добавить пакет System.Runtime.Serialization.Json , чтобы приложение могло обрабатывать ответы JSON. For our example, you’ll need to add the System.Runtime.Serialization.Json package, so your application can process JSON responses.

Для этого приложения понадобится пакет System.Runtime.Serialization.Json . You’ll need the System.Runtime.Serialization.Json package for this application. Добавьте его в свой проект, запустив следующую команду .NET CLI: Add it to your project by running the following .NET CLI command:

Выполнение веб-запросов Making Web Requests

Теперь вы готовы получать данные из Интернета. Now you’re ready to start retrieving data from the web. В этом приложении вы будете считывать информацию из API GitHub. In this application, you’ll read information from the GitHub API. Давайте, например, получим информацию о проектах под зонтичным брендом .NET Foundation. Let’s read information about the projects under the .NET Foundation umbrella. Для начала вам нужно составить запрос к API GitHub для получения информации о проектах. You’ll start by making the request to the GitHub API to retrieve information on the projects. Используемая конечная точка: https://api.github.com/orgs/dotnet/repos. The endpoint you’ll use is: https://api.github.com/orgs/dotnet/repos. Вы будете получать все данные об этих проектах, поэтому используйте запрос HTTP GET. You want to retrieve all the information about these projects, so you’ll use an HTTP GET request. Браузер также использует запросы HTTP GET, поэтому вы можете указать этот URL-адрес в адресной строке браузера и увидеть, какие сведения вы будете получать и обрабатывать. Your browser also uses HTTP GET requests, so you can paste that URL into your browser to see what information you’ll be receiving and processing.

Для выполнения веб-запросов используется класс HttpClient. You use the HttpClient class to make web requests. Как и все современные API-интерфейсы .NET, HttpClient поддерживает для API-интерфейсов длительного выполнения только асинхронные методы. Like all modern .NET APIs, HttpClient supports only async methods for its long-running APIs. Поэтому вам нужно создать асинхронный метод. Start by making an async method. Реализацию вы будете добавлять постепенно, по мере создания функций приложения. You’ll fill in the implementation as you build the functionality of the application. Сначала откройте файл program.cs , расположенный в каталоге проекта, и добавьте в класс Program следующий метод: Start by opening the program.cs file in your project directory and adding the following method to the Program class:

В верхней части метода Main нужно добавить директиву using , чтобы компилятор C# распознал тип Task. You’ll need to add a using directive at the top of your Main method so that the C# compiler recognizes the Task type:

Если сейчас вы выполните сборку проекта, то получите предупреждение для этого метода, поскольку он не содержит ни одного оператора await , и поэтому будет выполняться синхронно. If you build your project at this point, you’ll get a warning generated for this method, because it does not contain any await operators and will run synchronously. Пока это предупреждение можно игнорировать. Операторы await здесь появятся по мере заполнения метода. Ignore that for now; you’ll add await operators as you fill in the method.

Затем измените метод Main , чтобы он вызывал метод ProcessRepositories . Next, update the Main method to call the ProcessRepositories method. Метод ProcessRepositories возвращает задачу, до завершения которой выполнение программы не должно прекращаться. The ProcessRepositories method returns a task, and you shouldn’t exit the program before that task finishes. Поэтому следует изменить сигнатуру Main . Therefore, you must change the signature of Main . Добавьте модификатор async и измените тип возвращаемого значения на Task . Add the async modifier, and change the return type to Task . Затем в теле метода добавьте вызов к ProcessRepositories . Then, in the body of the method, add a call to ProcessRepositories . Добавьте ключевое слово await в этот вызов метода. Add the await keyword to that method call:

Теперь у вас есть программа, которая работает в асинхронном режиме, но не выполняет никаких действий. Now, you have a program that does nothing, but does it asynchronously. Давайте улучшим ее. Let’s improve it.

Для начала нужен объект, который может извлечь данные из Интернета. Для этого подойдет HttpClient. First you need an object that is capable to retrieve data from the web; you can use a HttpClient to do that. Он будет обрабатывать запрос и ответы на него. This object handles the request and the responses. Создайте один экземпляр этого типа в классе Program из файла Program.cs. Instantiate a single instance of that type in the Program class inside the Program.cs file.

Давайте вернемся к методу ProcessRepositories и создадим его первую версию. Let’s go back to the ProcessRepositories method and fill in a first version of it:

Чтобы эта версия успешно компилировалась, нужно добавить две новые директивы using в верхней части файла. You’ll need to also add two new using directives at the top of the file for this to compile:

Эта первая версия метода выполняет веб-запрос для чтения списка всех репозиториев в организации dotnet foundation. This first version makes a web request to read the list of all repositories under the dotnet foundation organization. (На сайте GitHub организация .NET Foundation имеет идентификатор dotnet .) Первые несколько строк настраивают HttpClient для этого запроса. (The GitHub ID for the .NET Foundation is dotnet .) The first few lines set up the HttpClient for this request. Сначала мы указываем, что он будет принимать ответы GitHub JSON. First, it is configured to accept the GitHub JSON responses. Они возвращаются в простом формате JSON. This format is simply JSON. Следующая строка добавляет заголовок User Agent ко всем запросам от этого объекта. The next line adds a User Agent header to all requests from this object. Кодом сервера GitHub проверяет эти два заголовка, и их наличие необходимо для извлечения сведений из GitHub. These two headers are checked by the GitHub server code, and are necessary to retrieve information from GitHub.

Читайте также:  Synaptics smbus driver для windows 10 64 bit

Когда вы настроите объект HttpClient, можно выполнить веб-запрос и получить ответ. After you’ve configured the HttpClient, you make a web request and retrieve the response. В первой версии используйте удобный метод HttpClient.GetStringAsync(String). In this first version, you use the HttpClient.GetStringAsync(String) convenience method. Этот метод запускает задачу для выполнения веб-запроса, а при получении результатов запроса он считывает поток ответа и извлекает из него содержимое. This convenience method starts a task that makes the web request, and then when the request returns, it reads the response stream and extracts the content from the stream. Текст ответа возвращается в формате String. The body of the response is returned as a String. Эта строка становится доступна после завершения задачи. The string is available when the task completes.

Последние две строки этого метода ожидают выполнения созданной задачи, а затем выводят ответ в консоль. The final two lines of this method await that task, and then print the response to the console. Выполните сборку приложения и запустите его. Build the app, and run it. Предупреждение при сборке теперь не отображается, поскольку в методе ProcessRepositories есть оператор await . The build warning is gone now, because the ProcessRepositories now does contain an await operator. В ответ вы получите длинный текст в формате JSON. You’ll see a long display of JSON formatted text.

Обработка результатов JSON Processing the JSON Result

Сейчас у вас уже есть код, который получает от веб-сервера ответ и отображает текст из этого ответа. At this point, you’ve written the code to retrieve a response from a web server, and display the text that is contained in that response. Теперь давайте преобразуем этот ответ JSON в объекты C#. Next, let’s convert that JSON response into C# objects.

Класс System.Text.Json.JsonSerializer сериализирует объекты в JSON и десериализирует JSON на объекты. The System.Text.Json.JsonSerializer class serializes objects to JSON and deserializes JSON into objects. Начните с определения класса, представляющего объект JSON repo , возвращенный из API GitHub: Start by defining a class to represent the repo JSON object returned from the GitHub API:

Поместите приведенный выше код в новый файл с именем repo.cs. Put the above code in a new file called ‘repo.cs’. Эта версия класса реализует простейший способ обработки данных JSON. This version of the class represents the simplest path to process JSON data. Имя класса и имя элемента совпадают с именами, используемыми в пакете JSON, и не соответствуют соглашениям C# об именовании. The class name and the member name match the names used in the JSON packet, instead of following C# conventions. Чтобы исправить это, мы позже добавим некоторые атрибуты конфигурации. You’ll fix that by providing some configuration attributes later. Этот класс демонстрирует еще одну важную возможность сериализации и десериализации JSON — не все поля в пакете JSON входят в этот класс. This class demonstrates another important feature of JSON serialization and deserialization: Not all the fields in the JSON packet are part of this class. Сериализатор JSON просто игнорирует информацию, которая не входит в используемый тип класса. The JSON serializer will ignore information that is not included in the class type being used. Такое поведение позволяет легко создавать типы, работающие с любым подмножеством полей из пакета JSON. This feature makes it easier to create types that work with only a subset of the fields in the JSON packet.

Теперь давайте выполним десериализацию созданного типа. Now that you’ve created the type, let’s deserialize it.

Теперь вызовите сериализатор для преобразования пакета JSON в объекты C#. Next, you’ll use the serializer to convert JSON into C# objects. В методе ProcessRepositories замените вызов GetStringAsync(String) следующими строками. Replace the call to GetStringAsync(String) in your ProcessRepositories method with the following lines:

Вы используете новое пространство имён, поэтому его также нужно добавить в верхней части файла: You’re using new namespaces, so you’ll need to add it at the top of the file as well:

Обратите внимание, что теперь вы используете GetStreamAsync(String) вместо GetStringAsync(String). Notice that you’re now using GetStreamAsync(String) instead of GetStringAsync(String). Сериализатор использует в качестве источника поток, а не строку. The serializer uses a stream instead of a string as its source. Рассмотрим несколько функций языка C#, которые используются во второй строке предыдущего фрагмента кода. Let’s explain a couple features of the C# language that are being used in the second line of the preceding code snippet. Первый аргумент JsonSerializer.DeserializeAsync (Stream, JsonSerializerOptions, CancellationToken) является выражением await . The first argument to JsonSerializer.DeserializeAsync (Stream, JsonSerializerOptions, CancellationToken) is an await expression. (Два других параметра являются необязательными и не включены в фрагмент кода.) Выражения await могут использоваться почти в любом месте кода, хотя пока мы их применяли только в операторе присваивания. (The other two parameters are optional and are omitted in the code snippet.) Await expressions can appear almost anywhere in your code, even though up to now, you’ve only seen them as part of an assignment statement. Метод Deserialize является общим, что означает, что необходимо предоставить аргументы типа того, какие объекты следует создать из текста JSON. The Deserialize method is generic, which means you must supply type arguments for what kind of objects should be created from the JSON text. В этом примере выполняется десериализация в List , который является еще одним общим объектом System.Collections.Generic.List . In this example, you’re deserializing to a List , which is another generic object, the System.Collections.Generic.List . Класс List<> хранит коллекцию объектов. The List<> class stores a collection of objects. Аргумент типа определяет тип объектов, хранящихся в List<> . The type argument declares the type of objects stored in the List<> . Текст JSON представляет набор объектов репозитория, поэтому аргументом типа является Repository . The JSON text represents a collection of repo objects, so the type argument is Repository .

В этом разделе все почти готово. You’re almost done with this section. Вы уже преобразовали JSON в объекты C#, и теперь можете отобразить имена всех репозиториев. Now that you’ve converted the JSON to C# objects, let’s display the name of each repository. Удалите вот эти строки кода: Replace the lines that read:

и замените их следующим фрагментом: with the following:

Скомпилируйте и запустите приложение. Compile and run the application. Оно выведет имена всех репозиториев, которые являются частью .NET Foundation. It will print the names of the repositories that are part of the .NET Foundation.

Управление сериализацией Controlling Serialization

Прежде чем добавлять дополнительные функции, давайте обратимся к свойству name с помощью атрибута [JsonPropertyName] . Before you add more features, let’s address the name property by using the [JsonPropertyName] attribute. В файле repo.cs внесите следующие изменения в объявление name : Make the following changes to the declaration of the name field in repo.cs:

Чтобы использовать атрибут [JsonPropertyName] , нужно добавить пространство имен System.Text.Json.Serialization в директивы using . To use [JsonPropertyName] attribute, you will need to add the System.Text.Json.Serialization namespace to the using directives:

Читайте также:  Windows 10 home original x64

Это изменение требует также изменить код в файле program.cs, который записывает имя каждого хранилища: This change means you need to change the code that writes the name of each repository in program.cs:

Выполните dotnet run , чтобы проверить правильность сопоставления. Execute dotnet run to make sure you’ve got the mappings correct. Результат выполнения должен быть такой же, как прежде. You should see the same output as before.

И еще одно изменение, прежде чем мы начнем добавлять новые функции. Let’s make one more change before adding new features. Метод ProcessRepositories может выполнять работу в асинхронном режиме и возвращает коллекцию репозиториев. The ProcessRepositories method can do the async work and return a collection of the repositories. Давайте сделаем так, чтобы этот метод возвращал List , а сегмент кода, который записывает информацию, переместим в метод Main . Let’s return the List from that method, and move the code that writes the information into the Main method.

Измените сигнатуру ProcessRepositories , чтобы этот метод возвращал задачу, результатом которой является список объектов Repository : Change the signature of ProcessRepositories to return a task whose result is a list of Repository objects:

Теперь мы можем просто возвращать репозитории после обработки ответа JSON: Then, just return the repositories after processing the JSON response:

Компилятор создает в качестве выходных данных объект Task , поскольку этот метод обозначен ключевым словом async . The compiler generates the Task object for the return because you’ve marked this method as async . Теперь мы изменим метод Main так, чтобы он записывает эти результаты и выводил в консоль имя каждого репозитория. Then, let’s modify the Main method so that it captures those results and writes each repository name to the console. Метод Main теперь выглядит следующим образом: Your Main method now looks like this:

Получение дополнительных сведений Reading More Information

И в завершении нашего руководства мы обработаем еще несколько свойств, содержащихся в пакете JSON, который отправляется из API GitHub. Let’s finish this by processing a few more of the properties in the JSON packet that gets sent from the GitHub API. Нет смысла обрабатывать всю информацию, но добавление нескольких свойств поможет продемонстрировать еще несколько возможностей языка C#. You won’t want to grab everything, but adding a few properties will demonstrate a few more features of the C# language.

Сначала добавьте еще несколько простых типов в определение класса Repository . Let’s start by adding a few more simple types to the Repository class definition. Добавьте в этот класс следующие свойства: Add these properties to that class:

Для этих свойств применяются встроенные преобразования из строкового типа (который используется в пакетах JSON) в целевой тип. These properties have built-in conversions from the string type (which is what the JSON packets contain) to the target type. Возможно, с типом Uri вы пока не знакомы. The Uri type may be new to you. Он представляет универсальный код ресурса, например URL-адрес, как в нашем примере. It represents a URI, or in this case, a URL. Если вы используете типы Uri и int , а пакет JSON содержит данные, для которых невозможно выполнить преобразование в целевой тип, действие сериализации создает исключение. In the case of the Uri and int types, if the JSON packet contains data that does not convert to the target type, the serialization action will throw an exception.

Добавив новые типы, включите их в метод Main : Once you’ve added these, update the Main method to display those elements:

На последнем этапе мы добавим сведения о последней операции принудительной отправки. As a final step, let’s add the information for the last push operation. Эта информация представлена в ответе JSON в следующем формате: This information is formatted in this fashion in the JSON response:

Этот формат имеет время в формате UTC, поэтому вы получаете значение DateTime, свойство Kind которого является Utc. That format is in Coordinated Universal Time (UTC) so you’ll get a DateTime value whose Kind property is Utc. Если вы предпочитаете дату, представленную в вашем часовом поясе, вам необходимо написать пользовательский метод преобразования. If you prefer a date represented in your time zone, you’ll need to write a custom conversion method. Сначала определите свойство public , которое будет содержать представление даты и времени в формате UTC в вашем классе Repository , а также свойство LastPush readonly , которое возвращает дату, преобразованную в местное время: First, define a public property that will hold the UTC representation of the date and time in your Repository class and a LastPush readonly property that returns the date converted to local time:

Давайте подробнее рассмотрим новые конструкции, которые мы только что определили. Let’s go over the new constructs we just defined. Свойство LastPush определяется с помощью члена, заданного выражением для метода доступа get . The LastPush property is defined using an expression-bodied member for the get accessor. Метод доступа set не существует. There is no set accessor. Именно так в C#, пропуская метод доступа set , определяется свойство только для чтения. Omitting the set accessor is how you define a read-only property in C#. (Да, вы можете создать в C# даже свойства только для записи, но для них трудно найти применение.) (Yes, you can create write-only properties in C#, but their value is limited.)

Вам осталось только добавить одну инструкцию вывода данных в консоль, и можно будет заново собрать и запустить приложение: Finally, add one more output statement in the console, and you’re ready to build and run this app again:

Теперь версия вашего приложения должна совпадать с полной версией примера. Your version should now match the finished sample.

Заключение Conclusion

В этом руководстве вы увидели, как правильно выполнять веб-запросы, анализировать результаты и отображать полученные в них свойства. This tutorial showed you how to make web requests, parse the result, and display properties of those results. Вы также добавили в свой проект несколько новых пакетов в качестве зависимостей. You’ve also added new packages as dependencies in your project. Еще вы увидели примеры некоторых функций языка C#, которые поддерживают объектно-ориентированный подход. You’ve seen some of the features of the C# language that support object-oriented techniques.

Вам не нужно выполнять команду dotnet restore , так как она выполняется неявно всеми командами, которые требуют восстановления, например dotnet new , dotnet build , dotnet run , dotnet test , dotnet publish и dotnet pack . You don’t have to run dotnet restore because it’s run implicitly by all commands that require a restore to occur, such as dotnet new , dotnet build , dotnet run , dotnet test , dotnet publish , and dotnet pack . Чтобы отключить неявное восстановление, используйте параметр —no-restore . To disable implicit restore, use the —no-restore option.

Команду dotnet restore по-прежнему удобно использовать в некоторых сценариях, где необходимо явное восстановление, например в сборках с использованием непрерывной интеграции в Azure DevOps Services или системах сборки, где требуется явно контролировать время восстановления. The dotnet restore command is still useful in certain scenarios where explicitly restoring makes sense, such as continuous integration builds in Azure DevOps Services or in build systems that need to explicitly control when the restore occurs.

Сведения об управлении веб-каналами NuGet см. в документации по dotnet restore . For information about how to manage NuGet feeds, see the dotnet restore documentation.

Оцените статью