我正在尝试从我的代码后面的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页面发送请求到同一位置。为什么这些会有所不同?
答案 0 :(得分:2)
您应确保配置文件中包含以下配置。您还可以看到与删除相关的其他一些帖子。 (修改以下适合您环境的设置)。
<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>
答案 1 :(得分:0)
401表示服务器希望您进行身份验证(可能只允许匿名访问读取操作)?
此外,您可能希望删除Content-Type标头,除非您真的计划发送带有请求的正文(对于DELETE来说这是非正统的......)
答案 2 :(得分: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";
}