c# - HTTP 删除请求

标签 c# http http-delete

我正尝试从我的代码后面在 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) 未经授权。”

我在服务器上收到了不同的结果,我认为这与 IIS 中的设置有关:“远程服务器返回错误:(501) 未实现。”

此外,正如我在下面对答案的评论中提到的,我可以在同一台服务器上使用 vbscript 从经典的 asp 页面发送 DELETE 请求,并将请求发送到与使用 c# 从我的 aspx 页面发出的请求相同的位置。为什么这些会有所不同?

最佳答案

  1. 您应该删除此处无用的 Content-Type header 。
  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>

关于c# - HTTP 删除请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3460969/

相关文章:

android - 改造为异步 FormUrlEncoded DELETE 调用抛出 IllegalArgumentException 异常

asp.net-mvc - 使用 Ajax.ActionLink 执行正确的 HTTP 删除时出现问题

C# 动态调用泛型方法

c# - 从 WebBrowser 控件 C# 获取滚动值

php - PHP 中的 HTTP POST 请求

amazon-web-services - AWS 上是否允许带有正文的 Get 请求?来自 CloudFront 的 403 错误

c# - 如何在 DataGridView 中突出显示搜索文本?

c# - DirectorySearcher 异步使用 await

c - 替换字符 http 响应

RESTful 取消删除