2013-07-29 17 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