Question HttpContext.Response.Filter


Actuellement en utilisant asp.net mvc 3 VS 2010. Juste installé VS 2013 et maintenant notre filtre personnalisé ne fonctionne pas. Lorsque la page est rendue, elle affiche simplement une page vierge. Le filtre contient des données et les écrit mais quelque chose dans le processus de chaînage ne fonctionne pas.

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

Dans visual studio 2010, le filtre est System.Web.HttpResponseStreamFilterSink.

Dans visual studio 2013, le filtre est Microsoft.VisualStudio.Web.PageInspector.Runtime.Tracing.ArteryFilter

Impossible même de trouver cette classe dans les documents. Il semble que ce ne soit pas le cas lorsque j'appelle la classe de flux.

C'est le code où j'écris le flux

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

10
2017-07-29 20:48


origine


Réponses:


Après une longue période de recherche, j'ai remarqué que VS2013 est venu avec un nouvel ajout; SignalR - ce qui s'avère être le problème de ArteryFilter.

Donc, pour résoudre ce problème, décochez la case "Activer le lien du navigateur" à côté de votre bouton Déboguer et le tour est joué filtres fonctionne comme prévu à nouveau. Encore bizarre que VS2013 ne enchaîne pas les filtres.

Uncheck the "Enable Browser Link"

Notez également qu'il s'agit d'une fonctionnalité ASP.NET générale, qui n'est donc pas limitée à MVC.

CONSERVÉ À L'HISTOIRE - LA RÉPONSE EST CI-DESSUS

Je ressens la même chose mais jusqu’à présent, cela semble lié au nouveau IISExpress et non au VS2013 perse. Ce qui a bien fonctionné dans VS2012 connaît le même sort que celui introduit par l'installation de VS2013.

Lorsqu'il est exécuté via IIS normal, le problème disparaît et votre code fonctionne correctement. Faites-moi savoir si vous trouvez un moyen de désactiver ce {Microsoft.VisualStudio.Web.PageInspector.Runtime.Tracing.ArteryFilter}.

Une enquête plus poussée montre que le applicationhost.config (généralement situé dans% USERPROFILE% \ documents \ IISexpress \ config) est en effet modifié par VS2013. J'ai une sauvegarde renommée en ApplicationHost.config.20120825120333.bak. La solution à ce mystère est en quelque sorte cachée dans ce changement de configuration.

Une restauration directe de la configuration empêche IISExpress de démarrer à partir de VS2013.

UNE SOLUTION NOT-SO-GOOD:

Vous pouvez désactiver le débogage (équivalent à CTRL + F5), et IISExpress agira et fonctionnera comme prévu. L'activation du débogage introduira à nouveau la fonctionnalité dont parle cette entrée.

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

10
2017-10-18 20:39



Nous venons de frapper ce problème dans VS 2015.

Pour ajouter à la réponse de Michael, la solution la plus élégante IMHO consiste à désactiver la fonctionnalité de lien de navigateur dans web.config, elle fonctionne donc pour tous les développeurs sans étape manuelle supplémentaire.

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

Plus de détails sur la fonctionnalité et comment la désactiver @http://www.asp.net/visual-studio/overview/2013/using-browser-link#disabling


4
2017-10-01 22:09