WebClient Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Предоставляет общие методы обмена данными с ресурсом, заданным URI.
public ref class WebClient : System::ComponentModel::Component
public ref class WebClient sealed : System::ComponentModel::Component
public class WebClient : System.ComponentModel.Component
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class WebClient : System.ComponentModel.Component
[System.Runtime.InteropServices.ComVisible(true)]
public class WebClient : System.ComponentModel.Component
type WebClient = class
inherit Component
[<System.Runtime.InteropServices.ComVisible(true)>]
type WebClient = class
inherit Component
Public Class WebClient
Inherits Component
Public NotInheritable Class WebClient
Inherits Component
- Наследование
- Атрибуты
Примеры
Следующий пример кода принимает URI ресурса, извлекает его и отображает ответ.
#using <System.dll>
using namespace System;
using namespace System::Net;
using namespace System::IO;
int main()
{
array<String^>^args = Environment::GetCommandLineArgs();
if ( args == nullptr || args->Length == 1 )
{
throw gcnew ApplicationException( "Specify the URI of the resource to retrieve." );
}
WebClient^ client = gcnew WebClient;
// Add a user agent header in case the
// requested URI contains a query.
client->Headers->Add( "user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)" );
Stream^ data = client->OpenRead( args[ 1 ] );
StreamReader^ reader = gcnew StreamReader( data );
String^ s = reader->ReadToEnd();
Console::WriteLine( s );
data->Close();
reader->Close();
delete client;
}
using System;
using System.Net;
using System.IO;
public class Test
{
public static void Main(string[] args)
{
if (args == null || args.Length == 0)
{
throw new ApplicationException("Specify the URI of the resource to retrieve.");
}
using WebClient client = new WebClient();
// Add a user agent header in case the
// requested URI contains a query.
client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)");
using Stream data = client.OpenRead(args[0]);
using StreamReader reader = new StreamReader(data);
string s = reader.ReadToEnd();
Console.WriteLine(s);
}
}
Imports System.Net
Imports System.IO
Public Class Test
Public Shared Sub Main(args() As String)
If args Is Nothing OrElse args.Length = 0 Then
Throw New ApplicationException("Specify the URI of the resource to retrieve.")
End If
Using client As New WebClient()
' Add a user agent header in case the
' requested URI contains a query.
client.Headers.Add("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)")
Using data As Stream = client.OpenRead(args(0))
Using reader As New StreamReader(data)
Dim s As String = reader.ReadToEnd()
Console.WriteLine(s)
End Using
End Using
End Using
End Sub
End Class
Комментарии
Важно!
Мы не рекомендуем использовать класс для новой разработки WebClient
. Вместо этого используйте System.Net.Http.HttpClient класс .
Класс предоставляет распространенные WebClient методы для отправки или получения данных из любого локального ресурса, ресурса интрасети или Интернета, определяемого URI.
Класс WebClient использует класс для предоставления WebRequest доступа к ресурсам. WebClient экземпляры могут получать доступ к данным с любым WebRequest потомком, зарегистрированным с помощью WebRequest.RegisterPrefix метода .
Примечание
По умолчанию .NET Framework поддерживает URI, начинающиеся с http:
идентификаторов схем , https:
, ftp:
и file:
.
В следующей таблице описаны методы WebClient отправки данных в ресурс.
Метод | Описание |
---|---|
OpenWrite | Извлекает объект , используемый Stream для отправки данных в ресурс. |
OpenWriteAsync | Извлекает объект , используемый Stream для отправки данных в ресурс, не блокируя вызывающий поток. |
UploadData | Отправляет массив байтов в ресурс и возвращает массив, содержащий любой Byte ответ. |
UploadDataAsync | Byte Отправляет массив в ресурс, не блокируя вызывающий поток. |
UploadFile | Отправляет локальный файл ресурсу и возвращает массив, содержащий любой Byte ответ. |
UploadFileAsync | Отправляет локальный файл ресурсу, не блокируя вызывающий поток. |
UploadValues | Отправляет в NameValueCollection ресурс и возвращает массив, содержащий любой Byte ответ. |
UploadValuesAsync | Отправляет в NameValueCollection ресурс и возвращает массив, содержащий любой Byte ответ, не блокируя вызывающий поток. |
UploadString | Отправляет в String ресурс и возвращает объект , содержащий любой String ответ. |
UploadStringAsync | Отправляет в String ресурс , не блокируя вызывающий поток. |
В следующей таблице описаны методы WebClient скачивания данных из ресурса.
Метод | Описание |
---|---|
OpenRead | Возвращает данные из ресурса в виде Stream. |
OpenReadAsync | Возвращает данные из ресурса, не блокируя вызывающий поток. |
DownloadData | Загружает данные из ресурса и возвращает Byte массив. |
DownloadDataAsync | Загружает данные из ресурса и возвращает Byte массив, не блокируя вызывающий поток. |
DownloadFile | Скачивает данные из ресурса в локальный файл. |
DownloadFileAsync | Скачивает данные из ресурса в локальный файл, не блокируя вызывающий поток. |
DownloadString | String Скачивает из ресурса и возвращает String. |
DownloadStringAsync | String Скачивает из ресурса, не блокируя вызывающий поток. |
Метод можно использовать для отмены CancelAsync асинхронных операций.
Экземпляр WebClient по умолчанию не отправляет необязательные http-заголовки. Если для запроса требуется необязательный заголовок, необходимо добавить заголовок в коллекцию Headers . Например, чтобы сохранить запросы в ответе, необходимо добавить заголовок агента пользователя. Кроме того, серверы могут вернуть значение 500 (внутренняя ошибка сервера), если отсутствует заголовок агента пользователя.
AllowAutoRedirect параметр имеет значение true
в WebClient экземплярах .
Примечания для тех, кто наследует этот метод
Производные классы должны вызывать реализацию базового класса , WebClient чтобы убедиться, что производный класс работает должным образом.
Конструкторы
WebClient() |
Устаревшие..
Инициализирует новый экземпляр класса WebClient. |
Свойства
AllowReadStreamBuffering |
Устаревшие..
Получает или задает значение, которое указывает, будет ли выполняться буферизация данных, считываемых с интернет-ресурса для экземпляра WebClient. |
AllowWriteStreamBuffering |
Устаревшие..
Получает или задает значение, которое указывает, будет ли выполняться буферизация данных, записываемых в интернет-ресурс для экземпляра WebClient. |
BaseAddress |
Возвращает или задает базовый URI для запросов, выполняемых экземпляром WebClient. |
CachePolicy |
Возвращает или задает политику кэширования приложения для любых ресурсов, полученных этим экземпляром WebClient с помощью объектов WebRequest. |
CanRaiseEvents |
Возвращает значение, показывающее, может ли компонент вызывать событие. (Унаследовано от Component) |
Container |
Возвращает объект IContainer, который содержит коллекцию Component. (Унаследовано от Component) |
Credentials |
Возвращает или задает учетные данные сети, которые передаются на узел и используются для проверки подлинности запроса. |
DesignMode |
Возвращает значение, указывающее, находится ли данный компонент Component в режиме конструктора в настоящее время. (Унаследовано от Component) |
Encoding |
Получает или задает Encoding, используемые для отправки и скачивания строк. |
Events |
Возвращает список обработчиков событий, которые прикреплены к этому объекту Component. (Унаследовано от Component) |
Headers |
Возвращает или задает коллекцию пар "имя-значение" заголовков, связанных с запросом. |
IsBusy |
Возвращает значение, указывающее, выполняется ли веб-запрос. |
Proxy |
Возвращает или задает прокси-сервер, используемый этим объектом WebClient. |
QueryString |
Возвращает или задает коллекцию пар "имя-значение" запросов, связанных с запросом. |
ResponseHeaders |
Возвращает коллекцию пар "имя-значение" заголовков, связанных с запросом. |
Site |
Получает или задает ISite объекта Component. (Унаследовано от Component) |
UseDefaultCredentials |
Возвращает или задает значение Boolean, которое управляет отправкой учетных данных DefaultCredentials вместе с запросами. |
Методы
CancelAsync() |
Отменяет асинхронную операцию в очереди. |
CreateObjRef(Type) |
Создает объект, который содержит всю необходимую информацию для создания прокси-сервера, используемого для взаимодействия с удаленным объектом. (Унаследовано от MarshalByRefObject) |
Dispose() |
Освобождает все ресурсы, занятые модулем Component. (Унаследовано от Component) |
Dispose(Boolean) |
Освобождает неуправляемые ресурсы, используемые объектом Component, а при необходимости освобождает также управляемые ресурсы. (Унаследовано от Component) |
DownloadData(String) |
Загружает ресурс, как массив Byte из заданного URI. |
DownloadData(Uri) |
Загружает ресурс, как массив Byte из заданного URI. |
DownloadDataAsync(Uri) |
Загружает ресурс как массив Byte из URI, указанного как асинхронная операция. |
DownloadDataAsync(Uri, Object) |
Загружает ресурс как массив Byte из URI, указанного как асинхронная операция. |
DownloadDataTaskAsync(String) |
Загружает ресурс как массив Byte из URI, указанного как асинхронная операция с помощью объекта задачи. |
DownloadDataTaskAsync(Uri) |
Загружает ресурс как массив Byte из URI, указанного как асинхронная операция с помощью объекта задачи. |
DownloadFile(String, String) |
Загружает в локальный файл ресурс с указанным URI. |
DownloadFile(Uri, String) |
Загружает в локальный файл ресурс с указанным URI. |
DownloadFileAsync(Uri, String) |
Загружает в локальный файл ресурс с указанным URI. Этот метод не блокирует вызывающий поток. |
DownloadFileAsync(Uri, String, Object) |
Загружает в локальный файл ресурс с указанным URI. Этот метод не блокирует вызывающий поток. |
DownloadFileTaskAsync(String, String) |
Загружает указанный ресурс в локальный файл как асинхронная операция с помощью объекта задачи. |
DownloadFileTaskAsync(Uri, String) |
Загружает указанный ресурс в локальный файл как асинхронная операция с помощью объекта задачи. |
DownloadString(String) |
Загружает требуемый ресурс как строку String. Ресурс, который требуется загрузить, указан как строка String, содержащая URI. |
DownloadString(Uri) |
Загружает требуемый ресурс как строку String. Загружаемый ресурс указан как Uri. |
DownloadStringAsync(Uri) |
Загружает ресурс, указанный как Uri. Этот метод не блокирует вызывающий поток. |
DownloadStringAsync(Uri, Object) |
Загружает указанную строку в указанный ресурс. Этот метод не блокирует вызывающий поток. |
DownloadStringTaskAsync(String) |
Загружает ресурс как String из URI, указанного как асинхронная операция с помощью объекта задачи. |
DownloadStringTaskAsync(Uri) |
Загружает ресурс как String из URI, указанного как асинхронная операция с помощью объекта задачи. |
Equals(Object) |
Определяет, равен ли указанный объект текущему объекту. (Унаследовано от Object) |
GetHashCode() |
Служит хэш-функцией по умолчанию. (Унаследовано от Object) |
GetLifetimeService() |
Устаревшие..
Извлекает объект обслуживания во время существования, который управляет политикой времени существования данного экземпляра. (Унаследовано от MarshalByRefObject) |
GetService(Type) |
Возвращает объект, представляющий службу, предоставляемую классом Component или классом Container. (Унаследовано от Component) |
GetType() |
Возвращает объект Type для текущего экземпляра. (Унаследовано от Object) |
GetWebRequest(Uri) |
Возвращает объект WebRequest для заданного ресурса. |
GetWebResponse(WebRequest) |
Возвращает объект WebResponse для указанного объекта WebRequest. |
GetWebResponse(WebRequest, IAsyncResult) |
Возвращает ответ WebResponse для указанного запроса WebRequest, используя указанный IAsyncResult. |
InitializeLifetimeService() |
Устаревшие..
Получает объект службы времени существования для управления политикой времени существования для этого экземпляра. (Унаследовано от MarshalByRefObject) |
MemberwiseClone() |
Создает неполную копию текущего объекта Object. (Унаследовано от Object) |
MemberwiseClone(Boolean) |
Создает неполную копию текущего объекта MarshalByRefObject. (Унаследовано от MarshalByRefObject) |
OnDownloadDataCompleted(DownloadDataCompletedEventArgs) |
Вызывает событие DownloadDataCompleted. |
OnDownloadFileCompleted(AsyncCompletedEventArgs) |
Вызывает событие DownloadFileCompleted. |
OnDownloadProgressChanged(DownloadProgressChangedEventArgs) |
Вызывает событие DownloadProgressChanged. |
OnDownloadStringCompleted(DownloadStringCompletedEventArgs) |
Вызывает событие DownloadStringCompleted. |
OnOpenReadCompleted(OpenReadCompletedEventArgs) |
Вызывает событие OpenReadCompleted. |
OnOpenWriteCompleted(OpenWriteCompletedEventArgs) |
Вызывает событие OpenWriteCompleted. |
OnUploadDataCompleted(UploadDataCompletedEventArgs) |
Вызывает событие UploadDataCompleted. |
OnUploadFileCompleted(UploadFileCompletedEventArgs) |
Вызывает событие UploadFileCompleted. |
OnUploadProgressChanged(UploadProgressChangedEventArgs) |
Вызывает событие UploadProgressChanged. |
OnUploadStringCompleted(UploadStringCompletedEventArgs) |
Вызывает событие UploadStringCompleted. |
OnUploadValuesCompleted(UploadValuesCompletedEventArgs) |
Вызывает событие UploadValuesCompleted. |
OnWriteStreamClosed(WriteStreamClosedEventArgs) |
Устаревшие..
Вызывает событие WriteStreamClosed. |
OpenRead(String) |
Открывает читаемый поток для данных, загруженных с ресурса, URI которого был указан как String. |
OpenRead(Uri) |
Открывает читаемый поток для данных, загруженных с ресурса, URI которого был указан как Uri. |
OpenReadAsync(Uri) |
Открывает поток, доступный для чтения и содержащий указанный ресурс. Этот метод не блокирует вызывающий поток. |
OpenReadAsync(Uri, Object) |
Открывает поток, доступный для чтения и содержащий указанный ресурс. Этот метод не блокирует вызывающий поток. |
OpenReadTaskAsync(String) |
Открывает считываемый поток, содержащий указанный ресурс как асинхронная операция с помощью объекта задачи. |
OpenReadTaskAsync(Uri) |
Открывает считываемый поток, содержащий указанный ресурс как асинхронная операция с помощью объекта задачи. |
OpenWrite(String) |
Открывает поток для записи данных в указанный ресурс. |
OpenWrite(String, String) |
Открывает поток для записи данных в указанный ресурс с помощью указанного метода. |
OpenWrite(Uri) |
Открывает поток для записи данных в указанный ресурс. |
OpenWrite(Uri, String) |
Открывает поток для записи данных в указанный ресурс с помощью указанного метода. |
OpenWriteAsync(Uri) |
Открывает поток для записи данных в указанный ресурс. Этот метод не блокирует вызывающий поток. |
OpenWriteAsync(Uri, String) |
Открывает поток для записи данных в указанный ресурс. Этот метод не блокирует вызывающий поток. |
OpenWriteAsync(Uri, String, Object) |
Открывает поток для записи данных в указанный ресурс с помощью указанного метода. Этот метод не блокирует вызывающий поток. |
OpenWriteTaskAsync(String) |
Открывает поток для записи данных в указанный ресурс как асинхронная операция с помощью объекта задачи. |
OpenWriteTaskAsync(String, String) |
Открывает поток для записи данных в указанный ресурс как асинхронная операция с помощью объекта задачи. |
OpenWriteTaskAsync(Uri) |
Открывает поток для записи данных в указанный ресурс как асинхронная операция с помощью объекта задачи. |
OpenWriteTaskAsync(Uri, String) |
Открывает поток для записи данных в указанный ресурс как асинхронная операция с помощью объекта задачи. |
ToString() |
Возвращает объект String, содержащий имя Component, если оно есть. Этот метод не следует переопределять. (Унаследовано от Component) |
UploadData(String, Byte[]) |
Передает буфер данных ресурсу, заданному с помощью URI. |
UploadData(String, String, Byte[]) |
Выгружает буфер данных на указанный ресурс с помощью указанного метода. |
UploadData(Uri, Byte[]) |
Передает буфер данных ресурсу, заданному с помощью URI. |
UploadData(Uri, String, Byte[]) |
Выгружает буфер данных на указанный ресурс с помощью указанного метода. |
UploadDataAsync(Uri, Byte[]) |
Выгружает буфер данных в ресурс, указанный с помощью URI, используя метод POST. Этот метод не блокирует вызывающий поток. |
UploadDataAsync(Uri, String, Byte[]) |
Выгружает буфер данных в ресурс, указанный с помощью URI, используя указанный метод. Этот метод не блокирует вызывающий поток. |
UploadDataAsync(Uri, String, Byte[], Object) |
Передает буфер данных в ресурс, определенный с помощью URI, используя при этом указанный метод и маркер идентификации. |
UploadDataTaskAsync(String, Byte[]) |
Отправляет буфер данных, содержащий массив Byte на URI, указанного как асинхронная операция с помощью объекта задачи. |
UploadDataTaskAsync(String, String, Byte[]) |
Отправляет буфер данных, содержащий массив Byte на URI, указанного как асинхронная операция с помощью объекта задачи. |
UploadDataTaskAsync(Uri, Byte[]) |
Отправляет буфер данных, содержащий массив Byte на URI, указанного как асинхронная операция с помощью объекта задачи. |
UploadDataTaskAsync(Uri, String, Byte[]) |
Отправляет буфер данных, содержащий массив Byte на URI, указанного как асинхронная операция с помощью объекта задачи. |
UploadFile(String, String) |
Передает заданный локальный файл ресурсу с заданным URI. |
UploadFile(String, String, String) |
Выгружает указанный локальный файл на указанный ресурс с помощью указанного метода. |
UploadFile(Uri, String) |
Передает заданный локальный файл ресурсу с заданным URI. |
UploadFile(Uri, String, String) |
Выгружает указанный локальный файл на указанный ресурс с помощью указанного метода. |
UploadFileAsync(Uri, String) |
Выгружает указанный локальный файл на указанный ресурс с помощью метода POST. Этот метод не блокирует вызывающий поток. |
UploadFileAsync(Uri, String, String) |
Выгружает указанный локальный файл на указанный ресурс с помощью метода POST. Этот метод не блокирует вызывающий поток. |
UploadFileAsync(Uri, String, String, Object) |
Выгружает указанный локальный файл на указанный ресурс с помощью метода POST. Этот метод не блокирует вызывающий поток. |
UploadFileTaskAsync(String, String) |
Отправляет указанный локальный файл в ресурс как асинхронная операция с помощью объекта задачи. |
UploadFileTaskAsync(String, String, String) |
Отправляет указанный локальный файл в ресурс как асинхронная операция с помощью объекта задачи. |
UploadFileTaskAsync(Uri, String) |
Отправляет указанный локальный файл в ресурс как асинхронная операция с помощью объекта задачи. |
UploadFileTaskAsync(Uri, String, String) |
Отправляет указанный локальный файл в ресурс как асинхронная операция с помощью объекта задачи. |
UploadString(String, String) |
Выгружает указанную строку на указанный ресурс с помощью метода POST. |
UploadString(String, String, String) |
Выгружает указанную строку на указанный ресурс с помощью указанного метода. |
UploadString(Uri, String) |
Выгружает указанную строку на указанный ресурс с помощью метода POST. |
UploadString(Uri, String, String) |
Выгружает указанную строку на указанный ресурс с помощью указанного метода. |
UploadStringAsync(Uri, String) |
Выгружает указанную строку в указанный ресурс. Этот метод не блокирует вызывающий поток. |
UploadStringAsync(Uri, String, String) |
Выгружает указанную строку в указанный ресурс. Этот метод не блокирует вызывающий поток. |
UploadStringAsync(Uri, String, String, Object) |
Выгружает указанную строку в указанный ресурс. Этот метод не блокирует вызывающий поток. |
UploadStringTaskAsync(String, String) |
Выгружает указанную строку в заданный ресурс как асинхронная операция с помощью объекта задачи. |
UploadStringTaskAsync(String, String, String) |
Выгружает указанную строку в заданный ресурс как асинхронная операция с помощью объекта задачи. |
UploadStringTaskAsync(Uri, String) |
Выгружает указанную строку в заданный ресурс как асинхронная операция с помощью объекта задачи. |
UploadStringTaskAsync(Uri, String, String) |
Выгружает указанную строку в заданный ресурс как асинхронная операция с помощью объекта задачи. |
UploadValues(String, NameValueCollection) |
Передает указанную коллекцию "имя-значение" указанному ресурсу, указанному с помощью URI. |
UploadValues(String, String, NameValueCollection) |
Передает указанную коллекцию "имя-значение" указанному ресурсу, указанному с помощью URI, используя указанный метод. |
UploadValues(Uri, NameValueCollection) |
Передает указанную коллекцию "имя-значение" указанному ресурсу, указанному с помощью URI. |
UploadValues(Uri, String, NameValueCollection) |
Передает указанную коллекцию "имя-значение" указанному ресурсу, указанному с помощью URI, используя указанный метод. |
UploadValuesAsync(Uri, NameValueCollection) |
Выгружает дату в указанной коллекции "имя-значение" в указанный ресурс, определенному с помощью URI. Этот метод не блокирует вызывающий поток. |
UploadValuesAsync(Uri, String, NameValueCollection) |
Выгружает дату в указанной коллекции "имя-значение" в указанный ресурс, определенный с помощью URI, используя указанный метод. Этот метод не блокирует вызывающий поток. |
UploadValuesAsync(Uri, String, NameValueCollection, Object) |
Выгружает дату в указанной коллекции "имя-значение" в указанный ресурс, определенный с помощью URI, используя указанный метод. Этот метод не блокирует вызывающий поток и позволяет вызывающей стороне передать объект в метод, вызванный после завершения операции. |
UploadValuesTaskAsync(String, NameValueCollection) |
Выгружает указанную коллекцию "имя-значение" в указанный ресурс, определенный с помощью URI, как асинхронная операция с использованием объекта задачи. |
UploadValuesTaskAsync(String, String, NameValueCollection) |
Выгружает указанную коллекцию "имя-значение" в указанный ресурс, определенный с помощью URI, как асинхронная операция с использованием объекта задачи. |
UploadValuesTaskAsync(Uri, NameValueCollection) |
Выгружает указанную коллекцию "имя-значение" в указанный ресурс, определенный с помощью URI, как асинхронная операция с использованием объекта задачи. |
UploadValuesTaskAsync(Uri, String, NameValueCollection) |
Выгружает указанную коллекцию "имя-значение" в указанный ресурс, определенный с помощью URI, как асинхронная операция с использованием объекта задачи. |
События
Disposed |
Возникает при удалении компонента путем вызова метода Dispose(). (Унаследовано от Component) |
DownloadDataCompleted |
Происходит после завершения асинхронной операции по загрузке данных. |
DownloadFileCompleted |
Происходит после завершения асинхронной операции по загрузке файла. |
DownloadProgressChanged |
Происходит при успешной передаче всех данных или их части посредством асинхронной операции загрузки. |
DownloadStringCompleted |
Происходит после завершения асинхронной операции по загрузке ресурса. |
OpenReadCompleted |
Происходит после завершения асинхронной операции по открытию строки, содержащей ресурс. |
OpenWriteCompleted |
Происходит после завершения асинхронной операции по записи данных в ресурс. |
UploadDataCompleted |
Происходит после завершения асинхронной операции по выгрузке данных. |
UploadFileCompleted |
Происходит после завершения асинхронной операции по выгрузке файла. |
UploadProgressChanged |
Происходит при успешной передаче всех данных или их части посредством асинхронной операции выгрузки. |
UploadStringCompleted |
Происходит после завершения асинхронной операции по выгрузке строки. |
UploadValuesCompleted |
Происходит после завершения асинхронной операции по выгрузке коллекции "имя-значение". |
WriteStreamClosed |
Устаревшие..
Происходит после закрытия асинхронной операции по записи данных в ресурс с использованием потока записи. |
Применяется к
См. также раздел
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по