我正在尝试使用html表单中的 DELETE 方法删除服务器上的文件。
我有一个文件,该文件的网址是:
http://example.com/file2.php
我使用以下代码删除文件:
<form action="file2.php"method="DELETE">
<input type="submit"value="delete file">
</form>
当我按&#34;删除文件&#34;按钮我被重定向到&#34; file2.php&#34;但它没有删除文件。
服务器正在GET方法中接收请求标头:
GET /file2.php HTTP/1.1
而不是DELETE:
DELETE /file2.php HTTP/1.1
有人知道删除方法无效的原因吗?或者如何使用DELETE方法删除我的文件?
答案 0 :(得分:3)
大多数浏览器不支持DELETE
作为<form ...>
的方法参数。实际上,它甚至不是HTML specification的一部分:
方法和 formmethod 内容属性是具有以下关键字和状态的枚举属性:
关键字 get ,映射到状态 GET ,表示HTTP GET方法。
关键字 post ,映射到状态 POST ,表示HTTP POST方法。
这是某种explanation:
似乎我们目前还不了解PUT和DELETE如何对HTML表单有用。
对于DELETE,创建有用的请求确实很容易。但是,服务器实现通常以200和最小响应体(&#34;删除&#34;)或204(无内容)响应。因此,不清楚如何在Web应用程序中使用它。
对于PUT,只要网页没有完全控制有效负载,并且也可以设置内容类型,似乎没有真正的用例。
请先考虑删除此功能,然后才能更清楚地了解它的优点。
像laravel这样的框架提供方法欺骗:
<input type='_method' value='DELETE' />
这将覆盖请求的方法,并将 - 例如 - 调用destroy函数:
Route::delete('/items/{id}', 'ItemController@destroy');
如果您不使用框架,可以尝试模仿此行为:
if($_SERVER['REQUEST_METHOD'] === 'DELETE' || (isset($_REQUEST['_method'] && $_REQUEST['_method'] === 'delete') {
...
}
答案 1 :(得分:2)
仅限Mozilla specifies using (var context = PrimaryConnection.returnNewConnection())
{
var groupedData = context.s84_Schedule.AsExpandable()
.Where(predicate)
.GroupBy(c => new { c.CustomerID, c.s84_Customer.CustomerName, c.SubdivisionID, c.s84_Subdivision.SubdivisionName, c.LotNumber })
.Select(grouped => new s84_Report_Project_POCO
{
CustomerID = grouped.Key.CustomerID,
CustomerName = grouped.Key.CustomerName,
SubdivisionID = grouped.Key.SubdivisionID,
SubdivisionName = grouped.Key.SubdivisionName,
LotNumber = grouped.Key.LotNumber,
Products = grouped
.Select(x => new s84_Report_Project_Product
{
ProductID = x.ProductID,
ProductName = x.s84_Product.ProductName,
ProductDate = x.CustomerExpectedDate,
FieldRepID = x.FieldRepID,
FieldRepName = x.s84_FieldRep.FieldRepName,
InstallerID = x.InstallerID,
InstallerName = x.s84_Installer.InstallerName,
StatusID = x.StatusID,
StatusColor = x.s84_Status.StatusColor,
StatusName = x.s84_Status.StatusName,
Completed = x.Completed
}).Orderby(t => t.CustomerExpectedDate).ToList()
});
var finalList = groupedData.ToList().Where(x => x.Products.Last().Completed == false).ToList();
List<s84_Report_Project_POCO> lst = finalList.OrderBy(x => x.Products.First().ProductDate).ToList();
和GET
我有两条建议:
使用POST将数据发送到PHP代码并从那里处理
实际上并没有删除那么简单的东西。创建一些只会说它被删除的功能,直到你确定它已经消失为止