为什么我的http响应主体突然包含了一大堆乱码?

时间:2009-12-17 10:02:12

标签: c# asp.net-mvc refactoring turbine

我正在尝试重构现有的asp.net-mvc Web应用程序并引入mvc-turbine。
该应用程序按原样运行,但我想使其更易于插拔和维护,以便将来的维护更容易。

我想我会尽量减少重构步骤,所以我引用了MvcTurbine,MvcTurbine.Unity和MvcTurbine.Web。 然后我在global.asax.cs中制作了我的MvcApplication,如下所示:

Public class MvcApplicatoin : TurbineApplication{
    static MvcApplication(){
        ServiceLocatorManager.SetLocatorProvider(() => new UnityServiceLocator());
        Application_Start();
    }
    <snip of all code that hasn't changed/>
}

我意识到调用Application_Start并不是它应该如何进行,但这会使第一步的变化尽可能小。
当我现在运行时,我看到我的控制器中的代码被命中并正确运行。然后我的观点正在呈现。我可以逐步完成每一行,也没有任何问题。然后结果显示在浏览器中:乱码 í½I%&/mÊ{JõJ×àt¡ $Ø@ìÁÍæìiG#)«*ÊeVeF的@Ìí¼÷Þ{ï½÷Þ
等等,整整一页。

没有Turbine我没有遇到这个问题,在之前的测试中我没有遇到任何问题,我会从一开始就介绍Turbine。
关于我如何开始调试的任何想法?

2 个答案:

答案 0 :(得分:2)

我会说你以某种方式将输出两次压缩。检查从.cctor调用Application_Start()之后加载的Response.Filter和HttpModules,以及从ASP.NET引擎调用它之后。

或者,确保安装了Klingon字体; - )

答案 1 :(得分:1)

Turbine不会为您的应用程序添加任何压缩,因此这是一个不同的问题。

但是,对于Application_Start方法,不应在静态构造函数中调用它。

您应该做的是覆盖启动方法并在此处执行任何逻辑。但是,这不会授予您为应用程序配置的IServiceLocator的访问权限。如果需要IServiceLocator,则覆盖PostServiceLocatorAcquisition方法,可以使用ServiceLocator属性来访问它。

我希望这有帮助!