我正在使用TRESTRequest对象的ExecuteAsync方法,而且我没有运气弄清楚如何让OnHTTPProtocolError事件进行处理。相反,根据文档,我只是得到EHTTPProtocolExceptions(500个错误)或超时异常,两者都是应该触发事件的场合。
我已经尝试为RESTRequest事件和同名的RESTClient事件分配兼容的方法,并且既没有触发,也总是得到异常。我也试过了一些Client属性,比如RaiseExceptionOn500和SynchronizedEvents,但无济于事。
我是否需要以特定方式使用线程执行?直接处理异常(通过管理线程)似乎是一种可能的解决方案,但我想尽可能避免这种情况,看看我能否得到任何答案,说明为什么这个看似简单的类功能对我不起作用。感谢。
编辑:更好的代码示例。
type
TForm1 = class(TForm)
Client: TRESTClient;
Request: TRESTRequest;
procedure FormCreate(Sender: TObject);
private
procedure ProtocolErrorTest(Request: TCustomRESTRequest);
procedure ResponseCall;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
Client := TRESTClient.Create('http://the-internet.herokuapp.com/status_codes');
Request.Client := Client;
Request.Method := rmGET;
Request.Accept:= 'application/json';
Request.OnHTTPProtocolError := ProtocolErrorTest;
Request.Resource := '500';
Request.ExecuteAsync(ResponseCall);
end;
procedure TForm1.ProtocolErrorTest(Request: TCustomRESTRequest);
begin
ShowMessage('Got it');
end;
procedure TForm1.ResponseCall;
begin
ShowMessage('No way');
end;