我在西雅图的RAD Studio10上使用Delphi来处理带有DataSnap的REST API。它可以处理大多数HTTP谓词,除了DELETE。根据DataSnap文档,它是有这个函数的,但是当我使用DELETE HTTP动词进行请求时,它会给我一个异常“项目RESTApi.exe引发异常类TDSServiceException,并显示消息‘命令已关闭或未分配’”。
遵循DataSnap接口的删除函数的代码。
function TSM.CancelLista(const ID_LISTA: integer): TJSONObject;
const
_DELETE = 'DELETE FROM listas WHERE id = :id';
begin
with FormPrincipal do
begin
DB_Query.Active := false;
DB_Query.SQL.Text := _DELETE;
DB_Query.ParamByName('id').Value := ID_LISTA;
Try
DB_Query.ExecSQL;
Result.AddPair('Response', 'Lista atualizada com sucesso');
Except on E : Exception do
Result.AddPair('Response', E.Message);
End;
end;
end;我正在使用PHP Code Igniter 4.0.4 web应用程序发出请求,但已经使用Delphi REST调试器进行了尝试,并获得了相同的结果。
发布于 2021-01-28 04:30:05
这个问题根本不在应用编程接口中,但是请求的方法没有正确生成,该方法是作为DELETE` `发送的,所以DataSnap应用编程接口不会将其识别为命令。作为代码触发器4.0.4 CURLRequest类的请求,如下所示:
$reqConfig = [
'headers' => [
'Accept' => 'application/json',
'Content-Type' => 'application/json'
]
];
$verb = '`DELETE`'
$curl->request($verb, 'Listas/'.id_lista, $reqConfig);解决了更改$verb去掉"`“的问题。
API DELETE函数现在为:
function TSM.CancelLista(const ID_LISTA: integer): TJSONObject;
const
_DELETE = 'DELETE FROM listas WHERE id = :id';
begin
Result := TJSONObject.Create;
with FormPrincipal do
begin
DB_Query.Active := false;
DB_Query.SQL.Text := _DELETE;
DB_Query.ParamByName('id').Value := ID_LISTA;
Try
DB_Query.ExecSQL;
Result.AddPair('Response', 'Lista deletada com sucesso');
Except on E : Exception do
Result.AddPair('Response', E.Message);
End;
end;
end;https://stackoverflow.com/questions/65926037
复制相似问题