请求路径和查询字符串尚不清楚,所以我们将简单地使用假人。这是可以实现的,因为 HTTP 模块不像 HTTP 处理程序那样绑定到路径。
沿途重要检查站
让我们在一些关键点设置一些断点,并确保它们到达并按照假设运行:
UploadHttpModule.Application_BeginRequest() – 确保 HTTP 模块实际处于活动状态(BeginRequest 事件处理程序是引发事件链中的第一个)
FieldNameTranslator..ctor() – 确保使用我们的值设置 FieldNameTranslator.PostBackID 字段
FilteringWorkerRequest.ParseOrThrow() - 确保多部分解析按预期工作
UploadContext.set_PostBackID(string) - 确保 UploadContext.postBackID 字段设置为我们的值
UploadContext.WritePersistFile() - 确保文件路径和内容包含我们的值
发送请求后,UploadHttpModule.Application_BeginRequest() 处的断点应该被击中。在这里我们还可以看到该模块希望 RawUrl 包含上传和 .aspx。
