我想使用HTTPoison Library在Elixir中执行以下命令.
$ curl -X DELETE -H "expired: 1442395800" -H "signature: ******************" -d '{"api_key":"***************","delete_path":"*******","expired":"****"}' https://cdn.idcfcloud.com/api/v0/caches
{"status":"success","messages":"We accept the cache deleted successfully."}
Run Code Online (Sandbox Code Playgroud)
当我检查的文件如何DELETE
在HTTPoison
def delete!(url, headers \\ [], options \\ []), do: request!(:delete, url, "", headers, options)
Run Code Online (Sandbox Code Playgroud)
只有url
和header
需要.那么我应该把请求体(json体)放在curl
哪里?
在Elixir,我试过了
req_body = "{\"api_key\":\"#{api_key}\",\"delete_path\":\"#{delete_path}\",\"expired\":\"#{expired}\"}"
url = "https://cdn.idcfcloud.com/api/v0/caches"
response = HTTPoison.delete!(url, header, [req_body])
Run Code Online (Sandbox Code Playgroud)
但似乎行不通.有人能说出正确的方法吗?
我正在尝试从我的代码后面的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();
}
Run Code Online (Sandbox Code Playgroud)
从我的开发环境运行这个我得到:"远程服务器返回错误:(401)未经授权."
我在服务器上收到了不同的结果,我认为它与IIS中的设置有关:"远程服务器返回错误:(501)未实现."
另外,正如我在下面的答案的评论中提到的,我能够使用同一服务器上的vbscript从经典的asp页面发送DELETE请求到与使用c#的aspx页面请求相同的位置.为什么这些会有所不同?
我使用Microsoft的WCF REST服务模板40在.NET 4中创建了一个WCF REST(aka WebHttp)服务.我在IIS 6中托管该服务.
服务模板使用Global.asax中的RouteTable作为创建"干净"URL的方法,其中不包含".svc".例如:
http:// localhost/flights/878
GET和POST对此URL工作正常,但PUT和DELETE导致HTTP 501,"未实现".
如果我创建一个简单的.svc文件,如下所示:
<%@ ServiceHost Language="C#" Debug="true" Service="MyProject.FlightsService"%>
Run Code Online (Sandbox Code Playgroud)
那么我可以对这个URL使用PUT和DELETE:
http:// localhost/flightsservice.svc/878
有谁知道是否有可能让PUT和DELETE对抗上面的"干净"URL?似乎没有办法配置IIS来允许这个,因为没有文件扩展名来配置设置,我不想全局允许PUT和DELETE.
我有一个关于HTTP DELETE和REST的问题.我有资源x.根据x的状态,删除x可以:
我假设HTTP DELETE 必须根据HTTP/REST细节删除资源,而不是将其标记为已删除,例如:在处理HTTP DELETE之后,x上的 GET 必须返回404.这意味着HTTP DELETE不能用于第二种情况.您将如何以RESTful方式模拟此删除行为(包括1和2)?
然后,由于可以恢复某些资源,因此也应该通过REST API实现这一点.您将如何以RESTful方式建模还原行为?
为简单起见,假设x位于http:// company/api/x /上.
我想尽可能使用适当的HTTP方法.在这种情况下,当单击按钮删除某些内容时,我想使用该属性触发控制器操作[HttpDelete]
.但是,我似乎无法使用此方法创建表单 - 使用Razor语法.该FormMethod
枚举没有一个选项Delete
并执行以下操作不会覆盖它:
@using (Html.BeginForm("Order", "Users", FormMethod.Post, new { method = "DELETE" }))
Run Code Online (Sandbox Code Playgroud)
搜索解决方案没有产生,没有人这样做吗?我知道我可以使用POST,但这不是HTTP删除方法的重点吗?
即使我的操作在数据库上执行delete方法,我总是使用HttpGet或HttpPost.
我应该使用什么HttpDelete/HttpPut?
我有一个简单的方法(在Tomcat 6.0.35上运行),如下所示:
@RequestMapping(value = "/bla/d", method = RequestMethod.DELETE)
@ResponseStatus(HttpStatus.NO_CONTENT)
public void d(@RequestParam String d){
//logic here
}
Run Code Online (Sandbox Code Playgroud)
当我发送一个DELETE请求,其中包含类似参数的帖子(d = gggg在正文中),我得到400 Bad Request.但如果我把它改成
@RequestMapping(value = "/bla/d", method = RequestMethod.POST)
@ResponseStatus(HttpStatus.NO_CONTENT)
public void d(@RequestParam String d){
//logic here
}
Run Code Online (Sandbox Code Playgroud)
它完美地运作.我正在使用Firefox附加组件来测试它(以及python和Spring的RestTemplate,结果相同)这里的请求是如何看待POST的(a是一个带有参数a的cope粘贴方法):
POST /bla/a HTTP/1.1
Host: ~~~~:8080
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:13.0) Gecko/20100101 Firefox/13.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Content-Length: 7
Pragma: no-cache
Cache-Control: no-cache
a=asdas
HTTP/1.1 204 No Content
Server: Apache-Coyote/1.1
Date: Tue, 12 Jun 2012 …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用HttpMethod的DELETE方法.我正在使用的代码是
response = restTemplate.exchange(url, HttpMethod.DELETE, requestEntity, Response.class);
Run Code Online (Sandbox Code Playgroud)
我也使用JacksonJson来映射json.删除功能返回应映射到Response类的json.但调用上面的行不起作用,并给出内部服务器错误500作为响应代码.但是,相同的API确实可以在浏览器中使用RESTClient,所以我猜有些东西我做得不对.
我的用户已经对我的LinkedIn应用程序进行了身份验证,但我也想让他们在任何给定时间从我的应用程序中取消身份验证.
我想我只是错过了http删除网址,但我不确定.
谢谢
Spring @CrossOrigin 注释不适用于 DELETE 方法。
示例代码(在 Groovy 中):
@CrossOrigin
@RestController
@RequestMapping('/rest')
class SpringController {
@RequestMapping(value = '/{fileName}', RequestMethod.DELETE)
void deleteFile(@PathVariable fileName) {
// logic
}
}
Run Code Online (Sandbox Code Playgroud)
对于这段代码,我得到了异常:
XMLHttpRequest 无法加载http://localhost:8080/rest/filename.txt。请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,不允许访问Origin ' http://localhost:4200 '。响应具有 HTTP 状态代码 404。
笔记:
@CrossOrigin(methods =
[RequestMethod.GET, RequestMethod.DELETE])
没有帮助http-delete ×10
c# ×2
rest ×2
spring ×2
spring-mvc ×2
android ×1
asp.net-mvc ×1
cors ×1
curl ×1
elixir ×1
http ×1
http-method ×1
http-put ×1
jackson ×1
json ×1
linkedin ×1
put ×1
razor ×1
rest-client ×1
revert ×1
wcf ×1