我在Delphi 6中有一个使用WebBroker的ISAPI应用程序。我需要在每个Action的开始和结束时添加日志记录信息。
我尝试过OnBeforeDispatch和OnAfterDispatch,但有些操作会将响应直接发送到浏览器,并且永远不会触发OnAfterDispatch事件。
有没有办法在不必为每个操作添加代码的情况下添加过滤器或其他内容?
答案 0 :(得分:0)
您可以做到的一种方法是只有一个动作。将路径设置为“/”并将操作设置为默认处理程序。然后:
我总是做一个已注册所有操作的动作处理程序引擎。然后代码就像这样
procedure TwmWebModule.wmWebModuleActionHandlerAction(Sender: TObject;
Request: TWebRequest;
Response: TWebResponse;
var Handled: Boolean);
var
HandlerID: string;
begin
HandlerID := StringReplace(string(Request.InternalPathInfo), '/', '', []);
FHandlerEngine.ExecuteHandler(HandlerID, Request, Response);
end;
现在只需添加日志记录:)这有其他好处。然后每个处理程序都在它自己的单元中,你实现了一种MVC方法。代码更清晰,更易于维护。
骨架看起来像这样:
TCustomHandler = class
private
FHandlerID: string;
FHandlerSettings: ISimpleStorage;
protected
procedure Execute(const Request: TWebRequest; const Response: TWebResponse); virtual; abstract;
public
constructor Create(const ID: string);
property HandlerID: string read FHandlerID;
property HandlerSettings: ISimpleStorage read FHandlerSettings;
end;
THandlerEngine = class
private
FHandlersList: TObjectList;
FRegisteredHandlers: THashTable;
protected
public
constructor Create;
destructor Destroy; override;
procedure RegisterHandlers;
procedure AddSingleHandler(const ID: string; const Handler: TCustomHandler);
procedure ExecuteHandler(const ID: string; const Request: TWebRequest; const Response: TWebResponse);
end;
你应该能够理解这一切的原则。