我遇到了这个问题我无法找到解释。
拥有一个处理ASP和ASPX请求的网站。 所有请求都通过一个名为MyModule的自定义托管模块运行,假设是为了“记录目的”。
这是WebConfig:
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true">
<add name="MyModule" type="MySample.MyModule" preCondition="managedHandler" />
</modules>
</system.webServer>
</configuration>
因此,如果表单通过AJAX,html表单或其他任何内容发布到/action.asp,我可以在Request.Form集合上查看和打印数据。
这是/action.asp
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%>
<%
dim count
count = Request.Form.Count
Response.write("Result: " & count)
Response.End()
%>
但是,如果在我的自定义托管模块中,我只是在ASP页面处理之前在表单集合中“PEEK”,该集合消失,它不再可用于/action.asp 这是MyModule:
namespace MySample
{
public class MyModule : IHttpModule
{
public MyModule()
{
}
public void Init(HttpApplication context)
{
context.BeginRequest += context_BeginRequest;
}
void context_BeginRequest(object sender, EventArgs e)
{
/*
* ALL REQUESTS PASS THROUGH THIS POINT BEFORE CONTINUING.
* COUNTING THE ITEMS ON THE FORM WILL CAUSE THE FORM-COLLECTION
* TO BE CLEARED WHEN IT'S HANDLED BY ASP.
*/
int count = HttpContext.Current.Request.Form.Count;
}
public void Dispose()
{
}
}
}
这太奇怪了。如果我“评论”计数行,表单集合将被修改为ASP页面。我只是偷看它来运行它。
我希望通过一些文档找到解释,而不仅仅是预感。
我无法将runAllManagedModulesForAllRequests设置为false,这不是一个选项。
我通过不同的.NET方法调用调试了请求,当您在.NET HttpRequest对象上查询Form对象时会发生很多事情,
// Form collection
/// Gets a collection of Form variables.
public NameValueCollection Form {
get {
EnsureForm();
if (_flags[needToValidateForm]) {
_flags.Clear(needToValidateForm);
ValidateHttpValueCollection(_form, RequestValidationSource.Form);
}
return _form;
}
}
// Populates the Form property but does not hook up validation.
internal HttpValueCollection EnsureForm() {
if (_form == null) {
_form = new HttpValueCollection();
/// THE FOLLWING METHOD AS A LOT OF SUB-CALLS AS WELL
if (_wr != null)
FillInFormCollection();
_form.MakeReadOnly();
}
return _form;
}
我遇到的预期行为是什么?备份此行为的文档或原因是什么?