HTTP DELETE запрос - PullRequest
       8

HTTP DELETE запрос

8 голосов
/ 11 августа 2010

Я пытаюсь выполнить HTTP-УДАЛЕНИЕ в C # из моего кода и не могу это сделать. Посмотрев на членов типа WebRequestMethods.Http, я даже не уверен, что это возможно.

Вот мой код:

try
{
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost/NameFiles/00000.txt");
    request.Method = "DELETE";
    request.ContentType = "application/x-www-form-urlencoded";
    HttpWebResponse response = (HttpWebResponse)request.GetResponse();

    if (response.StatusCode == HttpStatusCode.OK)
    {
        // some code
    }
}
catch (Exception ex)
{
    ex.ToString();
}

Запустив это из моей среды разработки, я получаю: «Удаленный сервер возвратил ошибку: (401) Несанкционированный».

Я получил другой результат на сервере, который, как мне кажется, как-то связан с настройками в IIS: «Удаленный сервер возвратил ошибку: (501) Не реализовано».

Кроме того, как я уже упоминал в комментарии к ответу ниже, я могу отправлять запросы DELETE с классической страницы asp, используя vbscript на том же сервере, в то же место, что и запрос со страницы aspx, используя c #. Почему они будут другими?

Ответы [ 3 ]

2 голосов
/ 11 сентября 2014
  1. Вы должны удалить заголовок Content-Type, который здесь бесполезен.
  2. Проверьте, используете ли вы IIS и имеют ли права на удаление файлы / папки, которые вы пытаетесь удалить. Это пользователь, о котором я могу думать: Учетная запись IUSR или IUSR_MachineName. Группа IIS_IUSRS или IIS_WPG.
  3. Для возврата ошибки 501 - PUT, DELETE, OPTIONS не включены по умолчанию. Следовательно, вам нужно включить на уровне веб-сервера.

Вы должны убедиться, что в файле конфигурации присутствуют следующие конфигурации. Вы также можете увидеть некоторые другие сообщения, связанные с удалением. (измените настройки ниже, соответствующие вашей среде).

 <handlers>
      <remove name="WebDAV" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
      <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,DEBUG,PUT,DELETE,PATCH,OPTIONS" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
0 голосов
/ 22 октября 2015

Следующий код работал для меня, он может быть полезен и для вас.

string headername = "TokenName";
string headervalue = "0000000000";

var request = (HttpWebRequest)WebRequest.Create("https://URL");

request.Method = "DELETE";
request.Headers.Add(headername, headervalue);

try
{
    var response = (HttpWebResponse)request.GetResponse();

    var responseString = new StreamReader(response.GetResponseStream()).ReadToEnd();

    var jss = new JavaScriptSerializer();
    var dict = jss.Deserialize<dynamic>(responseString);
    string message += "deleted Item with id" + dict["id"];
}
catch
{
    string message += "Didn't delete Item";
}
0 голосов
/ 11 августа 2010

401 означает, что сервер ожидает от вас аутентификации (возможно, он разрешает анонимный доступ только для операций чтения)?

Кроме того, вы можете удалить заголовок Content-Type, если вы действительно не планируете отправлять телос запросом (что было бы неортодоксально для DELETE ...)

...