这让我发疯了。我有一个Web应用程序,它是ASP.NET MVC 3和Classic ASP的混合体。经典ASP代码非常陈旧,并没有真正起到防止跨站点脚本或任何其他漏洞的作用。为了向Classic ASP页面添加一些安全性,我创建了一个IIS模块,它将在经典ASP处理之前拦截HTTP请求,并触发对请求的ASP.NET验证。这是:
public class RequestValidationModule : IHttpModule
{
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.PreRequestHandlerExecute += new EventHandler(context_PreRequestHandlerExecute);
}
void context_PreRequestHandlerExecute(object sender, EventArgs e)
{
var context = HttpContext.Current;
if (context != null)
{
var request = context.Request;
if (request != null)
{
string path = request.CurrentExecutionFilePathExtension;
if(string.Equals(path, ".asp", StringComparison.OrdinalIgnoreCase))
{
//access request collections to trigger request validation
var form = request.Form;
var qs = request.QueryString;
var c = request.Cookies;
var h = request.Headers;
}
}
}
}
}
这个模块很漂亮。但是,如果发送了有效请求,则经典ASP代码中的对象 Request.Form 始终为空!我无法获得表单(或查询字符串)中提交的任何值。只要从web.config中删除Module,就会再次填充request.form。
这是一个在IIS 7.5集成模式下运行的ASP.NET MVC 3应用程序。所有的asp页面都在MVC 3应用程序内的目录中。
答案 0 :(得分:0)
我也遇到过这个问题。 对于Classic ASP,它应该放在另一个应用程序池中。否则,Request.form不起作用