2013-07-29 16 views
10

目前使用asp.net mvc 3 VS 2010.刚刚安装了VS 2013,现在我们的自定义过滤器无法正常工作。当页面呈现时,它只显示一个空白页面。过滤器有数据并写出来,但链接过程中的某些内容不起作用。HttpContext.Response.Filter

var response = filterContext.HttpContext.Response; 
response.Filter = new MappingResponse(response.Filter); 

在visual studio 2010中,过滤器是System.Web.HttpResponseStreamFilterSink

在Visual Studio 2013的过滤器是Microsoft.VisualStudio.Web.PageInspector.Runtime.Tracing.ArteryFilter

甚至找不到这个类的文档。当我调用流类时,它好像不是链接Write方法。

这是实际的代码,我写出来的流

var responseBuffer = UTF8Encoding.UTF8.GetBytes(htmlPage); 
responseStream.Write(responseBuffer, 0, responseBuffer.Length); 
+0

这个问题是更广泛的更多细节。当你使用HttpContext.Current.Response.Write(“{'b':'test 2'}”);在asp.net中的一个wcf get操作中。下面的解除浏览器解决方案解决了我的问题。 – Rafi

回答

10

经过长期四处我注意到VS2013配备了新增加的; SignalR - 事实证明它与ArteryFilter问题有关。

因此,为了解决这个问题,取消勾选您的调试按钮旁边的“启用浏览器链接”功能;过滤器再次按预期工作。 VS2013不会过滤器仍然很奇怪。

Uncheck the "Enable Browser Link"

另外,请注意,这是一个普遍的ASP.NET的功能,因此不仅限于MVC。

保存历史 - 答案是高于

我遇到同样的事情,但到目前为止,似乎与新IISExpress,而不是VS2013深灰色。在VS2012中运行正常的VS.05与安装VS2013时引入的命运相同。

当通过正常的IIS执行该问题消失,因此您的代码工作正常。让我知道如果你找到一种方法来禁用这个{Microsoft.VisualStudio.Web.PageInspector.Runtime.Tracing.ArteryFilter}。

进一步的调查显示,applicationhost.config(通常位于%USERPROFILE%\ documents \ IISexpress \ config)确实由VS2013更改。我有一个备份重命名为ApplicationHost.config.20120825120333.bak。这种神秘的解决方案在某种程度上隐藏在这种配置变化中。

配置的直接恢复使IISExpress无法从VS2013启动。

ONE不那么好的解决方案:

您可以打开调试过的(相当于CTRL + F5),并IISExpress将采取行动和工作的预期。启用调试将再次引入此条目的功能。

<system.web> 
    <compilation targetFramework="4.5" debug="false"/> 
    <httpRuntime targetFramework="4.5"/> 
    </system.web> 
4

我们只是触及这个问题在2015年VS

要添加到迈克尔的回答,最优雅的解决方案恕我直言,是在web.config中禁用浏览器链接功能,所以它适用于所有开发人员无需额外手动步骤。

<appSettings> 
    <add key="vs:EnableBrowserLink" value="false"/> 
</appSettings> 

的功能以及如何禁用它@http://www.asp.net/visual-studio/overview/2013/using-browser-link#disabling

+0

现货!谢谢。我的猜测是,因为SignalR在请求流中插入特殊脚本以启用浏览器链接,它会在流程中锁定流。多么隐晦,再次感谢你。 – AverageJoe