2016-12-24 73 views
0

在我的申请中,我有路线/users/37/verify_email。因为此路线的行动更新激活信息在数据库中请求客户端以PUT方法完成此请求。可以重定向到`PUT`,`DELETE`方法吗?

在后台应用程序中有很多步骤需要验证。成功验证后,我重定向客户端下一步与302 Found一个小黑客:

Location: /users/37/verify_email?_method=PUT 

这看起来丑陋一点对我来说。

可以这样做重定向吗?

UPD

我按照REST,当我想删除资源我生成管理页面下一个环节:

<a href="https://stackoverflow.com/users/37?_method=DELETE">Delete</a> 
<a href="https://stackoverflow.com/users/37"    >View </a> 

如果我们在浏览器中会出现:

GET /users/37?_method=DELETE 
GET /users/37 

执行application/json时会出现:

DELETE /users/37 
GET /users/37 

但我不知道这是正确的把这样的路线到Location标题:

Location: /users/37?_method=DELETE 

我找不到任何地方的语法如下:

Location: DELETE /users/37 
+1

为什么在查询中需要'_method'?我的意思是,你应该检查直接使用哪种方法,而不是从查询参数中。 –

+0

@PavelŠtěrba更新了问题 –

回答

0

好了,你不能请遵循HTML表单中的REST,因为您仅限于GET and POST方法。

只需创建网址/users/37/delete,在此处进行所有验证并在成功时删除它。如果您想要使用REST API,请使用仅限JSON的界面单独保留它,因为在这里使用HTML时非常有限。

此外,对一个URL进行验证并将其重定向到删除自身的URL是非常危险的。如果你的用户会发现,哪个URL正在删除东西呢?他可以跳过验证。

考虑使用微服务或仅从后端代码调用API(API只能在Intranet上运行,并且只能从后端访问,而不能从外部访问)。

相关问题