11

目前使用 asp.net mvc 3 VS 2010。刚刚安装了 VS 2013,现在我们的自定义过滤器不起作用。当页面被渲染时,它只显示一个空白页面。过滤器有数据并将其写出,但链接过程中的某些内容不起作用。

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 );
4

2 回答 2

10

经过长时间的挖掘,我注意到 VS2013 增加了一个新功能;SignalR - 事实证明这与 ArteryFilter 问题有关。

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

取消选中

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

留作历史 - 答案在上面

我正在经历同样的事情,但到目前为止,它似乎与新的 IISExpress 而不是 VS2013 本身有关。在 VS2012 中运行良好的情况与安装 VS2013 所引入的情况相同。

当通过普通 IIS 执行时,问题消失了,因此您的代码工作正常。如果您找到禁用此 {Microsoft.VisualStudio.Web.PageInspector.Runtime.Tracing.ArteryFilter} 的方法,请告诉我。

进一步调查表明,applicationhost.config(通常位于 %USERPROFILE%\documents\IISexpress\config)确实被 VS2013 更改了。我有一个重命名为 ApplicationHost.config.20120825120333.bak 的备份。这个谜团的解决方案不知何故隐藏在此配置更改中。

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

一个不太好的解决方案:

您可以关闭调试(相当于 CTRL+F5),IISExpress 将按预期工作。启用调试将再次介绍此条目所涉及的功能。

  <system.web>
    <compilation targetFramework="4.5" debug="false"/>
    <httpRuntime targetFramework="4.5"/>
  </system.web>
于 2013-10-18T20:39:15.227 回答
4

我们刚刚在 VS 2015 中遇到了这个问题。

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

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

有关该功能的更多详细信息以及如何禁用它@ http://www.asp.net/visual-studio/overview/2013/using-browser-link#disabling

于 2015-10-01T22:09:32.327 回答