我在Delphi6中有一个使用WebBroker的ISAPI应用程序。我需要在每个操作的开始和结尾添加日志记录信息。
我尝试过OnBeforeDispatch和OnAfterDispatch,但有些操作将响应直接发送到浏览器,并且OnAfterDispatch事件从未触发。
有没有一种方法可以在不向每个操作添加代码的情况下添加过滤器或其他东西?
发布于 2012-03-23 23:37:13
可以这样做的一种方法是只有一个操作。将路径设置为"/“,并将action设置为默认处理程序。然后:
我总是做一个动作处理引擎,所有动作都注册了。然后,代码如下所示
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;你应该能够从这一切中理解原理。
https://stackoverflow.com/questions/9839752
复制相似问题