HttpContext.Response.Filter

В настоящее время используется 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 );

Ответ 1

После долгих копаний я заметил, что VS2013 поставляется с новым дополнением; SignalR - который, как выясняется, связан с проблемой ArteryFilter.

Итак, чтобы решить эту проблему, снимите флажок "Включить связь с браузером" рядом с кнопкой "Отладка" и вуалой; фильтры работают так, как ожидалось. Еще странно, что VS2013 не связывает фильтры.

Uncheck the "Enable Browser Link"

Также обратите внимание, что это общая функция ASP.NET и, следовательно, не ограничивается MVC.

СОХРАНЕН ДЛЯ ИСТОРИИ - ОТВЕТ ВЫШЕ

Я испытываю то же самое, но пока это похоже на новый IISExpress, а не VS2013 perse. То, что отлично работало в 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 будет действовать и работать должным образом. Включение debug еще раз представит функцию, о которой идет речь.

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

Ответ 2

Мы просто попали в эту проблему в VS 2015.

Чтобы добавить к Майклу ответ, самым изящным решением IMHO является отключить функцию ссылки на браузер в web.config, поэтому она работает для всех разработчиков без дополнительного ручного шага.

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

Подробнее об этой функции и о том, как ее отключить @http://www.asp.net/visual-studio/overview/2013/using-browser-link#disabling