8

コード ビハインドから C# で HTTP DELETE を実行しようとしていますが、これを実行できません。タイプのメンバーを見た後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) Unauthorized」というメッセージが表示されます。

サーバーで、IIS の設定に関係があると思われる別の結果を受け取りました。「リモート サーバーがエラーを返しました: (501) 実装されていません。」

また、以下の回答へのコメントで述べたように、同じサーバー上で vbscript を使用してクラシック ASP ページから DELETE リクエストを、C# を使用して aspx ページからのリクエストと同じ場所に送信できます。なぜこれらは異なるのでしょうか?

4

3 に答える 3

2
  1. ここでは役に立たない Content-Type ヘッダーを削除する必要があります。
  2. IIS を使用しているかどうか、および削除しようとしているファイル/フォルダーに削除権限があるかどうかを確認してください。考えられるユーザーは次のとおりです。 IUSR または IUSR_MachineName アカウント。IIS_IUSRS または IIS_WPG グループ。
  3. 501 エラーが返される場合 - PUT、DELETE、OPTIONS はデフォルトでは有効になっていません。したがって、Web サーバー レベルで有効にする必要があります。

次の構成が構成ファイルにあることを確認する必要があります。削除に関連する他の投稿も見ることができます。(環境に合わせて以下の設定を変更してください)。

 <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>
于 2014-09-11T02:27:23.967 に答える
0

401 は、サーバーが認証を期待していることを意味します (おそらく、読み取り操作に対してのみ匿名アクセスを許可します)?

さらに、リクエストで本文を送信する予定がない限り、Content-Type ヘッダーを削除することもできます (これは DELETE では一般的ではありません...)。

于 2010-08-11T17:52:55.590 に答える
0

次のコードは私にとってはうまくいきました。あなたにとっても役立つかもしれません。

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";
}
于 2015-10-22T14:21:19.263 に答える