2009-04-01 5 views
4

Dans une application web, je travaille sur le ReportViewer continue à me donner une erreur « manquant paramètre d'URL: Nom ». J'ai trouvé la cause mais pas une solution.ReportViewer « Missing paramètre URL: Nom »

L'URL qui provoque l'exception du spectateur rapport

Reserved.ReportViewerWebControl.axd?ReportSession=3bkunv2wte3wmnabkquyr1y0&ControlID=1e2b5870e07b46abac7fd32a9e0e4b9d&Culture=1033&UICulture=1033&ReportStack=1&OpType=ReportArea&Controller=ctl00_ASPxRoundPanel3_PageContent_Wizard1_ReportViewer1&PageNumber=1&ZoomMode=Percent&ZoomPct=100&ReloadDocMap=true&SearchStartPage=0&LinkTarget=_top 

si vous remarquez dans la chaîne de requête au lieu de « nom & = » pour une raison quelconque, il devient « & amp; Name = ».

J'ai remarqué sur Google numineux recherches il y a joints à un grand nombre de personnes ayant le même problème, mais pas une solution.

Répondre

2

sonne comme quelque chose est mutiler quelque part votre URL. Avez-vous par hasard un proxy Bluecoat en place? J'ai vu quelque chose à propos de Bluecoat mangling l'URL.

Si tel est le cas et que vous avez le contrôle sur le proxy, vous pourriez être en mesure d'obtenir un tunnel percé à travers pour vos rapports. Sinon, vous devrez peut-être réécrire l'URL de votre côté.

Vérifiez here pour plus d'informations (dernier message dans le fil a une solution de contournement possible).

+0

Je viens d'avoir la même chose. Les serveurs proxy Buggy comme BlueCoat ne décodent pas correctement les URL HTML, donc quand vous essayez d'appeler Request.Querystring, il ne trouve pas la valeur. – NickG

1

Vous pouvez résoudre ce problème à l'échelle mondiale en vérifiant l'en-tête de demande BlueCoat au début de chaque demande. Ce morceau de code placé dans Global.asax.cs résout le problème:

protected void Application_BeginRequest(Object sender, EventArgs e) 
{ 
    // Fix incorrect URL encoding by buggy BlueCoat proxy servers: 
    if (!String.IsNullOrEmpty(Request.ServerVariables["HTTP_X_BLUECOAT_VIA"])) 
    { 
     string original = Request.QueryString.ToString(); 

     if (original.Contains(Server.UrlEncode("amp;"))) 
     { 
      HttpContext.Current.RewritePath(Request.Path + "?" + original.Replace(Server.UrlEncode("amp;"), "&")); 
     } 
    } 
} 

Je ne sais pas si d'autres serveurs proxy ont le même problème, mais si elles le font, cela pourrait être facilement adapté pour vérifier pour la présence de & dans la QueryString au lieu de vérifier l'en-tête BlueCoat (ou je suppose, vous pourriez juste vérifier les en-têtes de tous les autres produits affectés, qui pourraient être plus sûrs