在Web应用程序中,我正在使用ReportViewer不断给我一个错误“缺少URL参数:名称”。我找到了原因但不是解决方案。
从报告查看器中导致异常的网址
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
如果您在查询字符串中注意到而不是“& name =”由于某种原因它会变成“& amp; Name =”。
我注意到在谷歌的搜索中,有很多人遇到同样的问题而不是一个解决方案。
答案 0 :(得分:2)
听起来有些东西在某个地方毁了你的网址。您是否偶然获得了Bluecoat代理?我看到一些关于Bluecoat破坏URL的事情。
如果是这种情况并且您可以控制代理,那么您可能可以通过它为您的报告打孔。否则,您可能需要在最后重写URL。
检查here以获取更多信息(该主题中的最后一篇文章有可能的解决方法)。
答案 1 :(得分:1)
您可以通过在每个请求开始时检查BlueCoat请求标头来全局修复此问题。放在global.asax.cs中的这段代码解决了这个问题:
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;"), "&"));
}
}
}
我不确定是否有任何其他代理服务器存在同样的问题,但如果有的话,可以很容易地对其进行调整以检查QueryString中是否存在&
而不是检查BlueCoat标头(或者我想,您可以检查任何其他受影响产品的标题,这可能更安全。