添加IIS模块后,ASP Classic Request.Form为空

时间:2012-06-27 19:22:28

标签: asp.net asp.net-mvc-3 asp-classic iis-7.5

这让我发疯了。我有一个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应用程序内的目录中。

1 个答案:

答案 0 :(得分:0)

我也遇到过这个问题。 对于Classic ASP,它应该放在另一个应用程序池中。否则,Request.form不起作用