3

这真让我抓狂。我有一个混合了 ASP.NET MVC 3 和 Classic ASP 的 Web 应用程序。经典的 ASP 代码非常陈旧,在防止跨站点脚本或任何其他漏洞方面并没有起到多大作用。为了给 Classic ASP 页面增加一点安全性,我创建了一个 IIS 模块,该模块将在 HTTP 请求被 Classic ASP 处理之前拦截它并触发请求的 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 中删除模块,request.form 就会再次填充。

这是一个在 IIS 7.5 集成模式下运行的 ASP.NET MVC 3 应用程序。所有的 asp 页面都在 MVC 3 应用程序内的一个目录中。

4

1 回答 1

1

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

于 2017-06-28T02:06:02.633 回答