使用ASP.NET MVC,有没有办法捕获所有POST请求,无论URL到主机?

时间:2013-03-01 18:19:46

标签: asp.net-mvc http-post

我在调试一个MVC应用程序时遇到了麻烦,我希望它能够依赖于POST。

是否有一种简单的方法可以配置MVC 4应用程序来拦截所有POST请求,这样我就可以看到它尝试发布的URL以及响应是什么?

1 个答案:

答案 0 :(得分:5)

通常情况下,全局过滤器就是您想要的。但是,由于在确定路线之后才会触发,因此在这种情况下可能无法帮助您。

您可以尝试的一件事是在global.asax中添加Application_BeginRequest方法。它甚至不必任何东西。只需在其中设置断点,并检查Request.AppRelativeCurrentExecutionFilePath(或请求的其他成员)以查看入站路径是什么。

    protected void Application_BeginRequest()
    {
        if (Request.HttpMethod.Equals("post", StringComparison.InvariantCultureIgnoreCase))
        { // Breakpoint here

        }
    }

global filter”是将行为等注入管道的首选方法。 MVC已经实现了其中的一些,你也可以扩展或实现自己的。

我去年实施的一个具体示例:客户端网站具有使密码过期的功能。大;当用户在被告知时立即更改它时,工作正常。但是他们发现他们可以直接导航到网站的另一部分,直到他们下次登录才再次提示。所以我们添加了一个全局过滤器,检查密码是否过期(以及我们是否已经检查过在此会话中),如果是,则重定向到“更改密码”屏幕。更改后,他们可以返回到以前的任何地方。

但是,这样做的缺点是找出路由或绑定问题:路由引擎已经在全局过滤器获取之前评估了请求。如果无法识别目标操作,则甚至不会命中您的过滤器。因此,在这种情况下,像Application_BeginRequest这样的低级功能是您唯一的现实选择。