【问题标题】:ASP.Net MVC - strange params caching behaviour in ActionsASP.Net MVC - Actions 中奇怪的参数缓存行为
【发布时间】:2009-03-12 17:45:04
【问题描述】:

我在我的项目中遇到了一个奇怪的问题。我的操作是获取旧参数值,而不是 Request.Params 中的实际值。我创建了一个 HomeController.Echo(string text) 动作来说明它(见截图)。当我第一次调用“Home/Echo?text=aaa”等动作时,一切正常。当我第二次使用不同的文本值(“Home/Echo/text=bbb”)调用相同的操作时,我在操作“text”参数中再次获得旧的“aaa”值。奇怪的是 Request.Params 包含正确的“bbb”值。

我在想是否有什么我可以打破自己,但无法弄清楚任何事情。我从 IoC 容器提供控制器,我重写了 ControllerActionInvoker.InvokeActionMethodWithFilters 方法(将依赖项注入到来自 IoC 的过滤器中),我正在处理 HttpApplication.AuthenticateRequest。在任何这些中,我都不使用参数/绑定...

screenshot

【问题讨论】:

    标签: asp.net-mvc caching binding action


    【解决方案1】:

    这个问题可能是由一些线程问题引起的 - 我忘记在我的 IoC 容器中注册具有每个请求生命周期的控制器(它们被注册为单例)。

    【讨论】:

      【解决方案2】:

      您是否已通过应用程序进行调试以查看值在何处被切换。对文本变量(无论您在代码中如何称呼它)进行简单的观察应该会在变量发生更改的位置产生。没有代码可以运行,我不知道它发生在哪里。

      我会说写一个测试,但这里仍然有可能 UI 干扰。如果您发现代码中的哪些地方发生了变化,请编写一个测试来确认该错误并开始对其进行修改。

      【讨论】:

        【解决方案3】:

        我建议您开始评论您覆盖的所有方法,直到您找出问题为止。在最坏的情况下,您会在创建项目时 ASP.NET MVC 向导离开您的项目,并且参数绑定确实有效。

        【讨论】:

        • 看起来它是由我用来从 IoC 容器提供控制器的 MvcContrib.Castle.WindsorControllerFactory 引起的。当我注释掉 ControllerBuilder.Current.SetControllerFactory() 行时,参数工作正常。我会尝试找出更多细节......
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-09
        • 2015-06-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多