Поделиться через


Запрос DELETE в классе HttpWebRequest (платформа служб данных ADO.NET)

Данные можно удалить из служб данных ADO.NET, используя запрос HTTP DELETE. Запрос DELETE можно применять к наборам сущностей, определяемым ключом, значениями свойств, ссылками и свойствами навигации.

Запрос DELETE для удаления сущности

Данные, необходимые запросу DELETE, форматируются как строка, которая становится частью тела запроса HTTP. Запрос DELETE сначала определяет набор сущностей и ключ удостоверения. Следующий пример основан на Модель AdventureWorks Sales (модель EDM). URI включает набор сущностей Address и ключ: "https://localhost:50781/AdvWksSalesS.svc/Address(32523)". Если удаляемая сущность является частью иерархии наследования, то требуется элемент синтаксиса __metadata:

  "{__metadata:{Uri:'/Addres(32523/', " +
      "Type:'AdventureWorksModel.Address'}}"

Полный пример использования Формат JSON (платформа служб данных ADO.NET) для удаления элемента данных из набора сущностей Address приводится в блоке кода в конце этого описания.

Код блока, приведенного в конце этого описания, удаляет сущность Address из службы данных, которая выполняет развертывание AdventureWorksModel. Запрос HttpWebRequest r создается с URI удаляемого типа сущности: https://localhost:50781/AdvWksSalesS.svc/Address(32523 в качестве единственного параметра его конструктора.

Тело запроса назначается строке с именем requestPayload. Используется метод "DELETE". В качестве ContentType указывается протокол json. Строка r.Accept = "application/json" сообщает серверу о необходимости передать ответ, если он есть, закодированный с помощью протокола json.

Если служба защищена схемой проверки подлинности на основе транспорта, такой как базовая проверка подлинности HTTP, то учетные данные можно передавать, задавая их запросу. Для следующего примера используется метод DefaultCredentials.

Запрос r форматируется как текст в Юникоде. Переменная UTF8Encoding используется для получения длины запроса в байтах, чтобы записать цифровые данные в объект запроса Stream. Объект HttpWebResponse назначается путем вызова метода GetResponse для запроса. Код r.GetResponse передает данные и получает ответ. Другой объект Stream, rspStm, используется для хранения данных, которые возвращает метод GetResponseStream.

    HttpWebRequest r =
  WebRequest.Create(
            "https://localhost:50781/AdvWksSalesS.svc/Address(32523)")
            as HttpWebRequest;

    string requestPayload = "{__metadata:{Uri:'/Address(32523)/', " +
        "Type:'AdventureWorksModel.Address'}}";

    r.Method = "DELETE";
    UTF8Encoding encoding = new UTF8Encoding();
    r.ContentLength = encoding.GetByteCount(requestPayload);
    r.Credentials = CredentialCache.DefaultCredentials;
    r.Accept = "application/json";
    r.ContentType = "application/json";

    //Write the payload to the request body.
    using ( Stream requestStream = r.GetRequestStream())
    {
        requestStream.Write(encoding.GetBytes(requestPayload), 0,
            encoding.GetByteCount(requestPayload));
    }

    try
    {
        HttpWebResponse response = r.GetResponse() as HttpWebResponse;
        string responseBody = "";
        using (Stream rspStm = response.GetResponseStream())
        {
            using (StreamReader reader = new StreamReader(rspStm))
            {
                textBoxResponse.Text = textBoxResponse.Text + 
                    "Response Description: " + 
                     response.StatusDescription;
                textBoxResponse.Text = textBoxResponse.Text + 
                    "Response Status Code: " + response.StatusCode;
                textBoxResponse.Text = textBoxResponse.Text +
                    "\r\n\r\n";
                responseBody = reader.ReadToEnd();
            }
        }
        textBoxResponse.Text = "Success: " + response.StatusCode.ToString();
    }
    catch (System.Net.WebException ex)
    {
        textBoxResponse.Text = textBoxResponse.Text + 
            "Exception message: " + ex.Message;
        textBoxResponse.Text = textBoxResponse.Text + 
            "\r\nResponse Status Code: " + ex.Status;
        textBoxResponse.Text = textBoxResponse.Text + "\r\n\r\n";
        // get error details sent from the server
        StreamReader reader = 
            new StreamReader(ex.Response.GetResponseStream());
        textBoxResponse.Text = textBoxResponse.Text + reader.ReadToEnd();
        
    }

Дополнительные сведения о протоколах, используемых с методом DELETE, см. в разделе Метод DELETE (платформа служб данных ADO.NET).

См. также

Понятия

Метод DELETE (платформа служб данных ADO.NET)
Метод GET в классе HttpWebRequest (платформа служб данных ADO.NET)
Метод PUT в классе HttpWebRequest (платформа служб данных ADO.NET)
Запрос POST в классе HttpWebRequest (платформа служб данных ADO.NET)
PUT, POST и DELETE (платформа служб данных ADO.NET)