【问题标题】:.Net Form POST.Net 表单 POST
【发布时间】:2010-09-16 17:21:19
【问题描述】:

我有一个客户在测试期间给我提供了相互矛盾的信息。我不认为他们在撒谎,而是更加困惑。所以,我想在我的 ASP.Net 应用程序中设置一些简单的审计。具体来说,当任何页面被调用时,我想立即将查询字符串和/或表单 POST 数据插入日志表。只是原始值。

查询字符串很简单。但是似乎没有办法在不使用 BinaryRead 的情况下获取原始表单 POST 数据,如果我这样做了,那么我稍后会不再使用 Request.Form 集合。

有人知道解决这个问题的方法吗?

编辑:tvanfosson 建议 Request.Params。我一直在寻找更容易使用的东西(比如 Request.Querystring,仅用于 POST),但我想我可以轻松地遍历所有参数并构建一个 name=value& 字符串等)。

【问题讨论】:

  • 以防万一,当多个参数具有相同名称时,NameValueCollection(例如 Request.Params 或 Request.Form)上的 GetValues() 方法会返回多个项目。 (例如test.com/a.aspx?book=book1&book=book2

标签: c# asp.net form-post


【解决方案1】:

您可以创建一个自定义 HttpModule 来捕获对您的应用程序发出的所有请求,这样您就不需要触摸每个页面,并且您只能在测试期间使用它,以免降低生产中的性能。

一个示例实现是:

public class CustomModule : IHttpModule 
{
    public void Init(HttpApplication context)
    {
        context.EndRequest += new EventHandler(context_BeginRequest);
    }

    private void context_BeginRequest(object sender, EventArgs e)
    {
        HttpContext context = ((HttpApplication)sender).Context;
        // you can use the context.Request here to send it to the database or a log file
    }
}

您需要将模块添加到您的 web.config 中

<httpModules>
    <add name="CustomModule" type="CustomModule"/>
</httpModules>

【讨论】:

    【解决方案2】:

    所有表单数据都应在Request.Params 中。您需要在每个页面上执行此操作,或者可能使用 HttpModule。

    [编辑] 如果您想单独获取表单参数,请使用 Request.Form,以及 Request.QueryString

    【讨论】:

    • 我可以在每个页面上执行此操作,但我希望将通过 GET 传递的内容和通过 POST 传递的内容分开(因为您可以在页面上同时执行这两项操作,对吗?只是添加 ?name=value&... 作为表单 POST 的操作?)
    • Request.Form 应该只包含表单参数并且您已经知道如何获取查询字符串。
    • 是的,Request.Form 我知道。我希望 Request.Form 将它们整齐地放入一个字符串中。但是,我可以遍历所有 Request.Form 并自己构建一个字符串,然后只使用 Querystring。我想我只是懒惰。谢谢!
    【解决方案3】:

    我建议为这种场景实施 HttpHandler 或 HttpModule。您可以从 Page_Load 事件中获取 POST 数据,但在这里实现此日志记录工具并不那么可维护。

    【讨论】:

    • 我不确定我是否理解 HttpHandler 或 HttpModule 将如何提供帮助。有没有办法,使用这些,我可以获取原始表单数据,而不会在过程中搞砸 Request 对象?
    猜你喜欢
    • 2017-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 2010-10-06
    • 2011-12-11
    • 1970-01-01
    相关资源
    最近更新 更多