Delphi:从未调用TRESTRequest OnHTTPProtocolError事件

时间:2018-01-27 02:14:50

标签: rest http delphi vcl

我正在使用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;

0 个答案:

没有答案