ReportViewer“缺少 URL 参数:名称”

Posted

技术标签:

【中文标题】ReportViewer“缺少 URL 参数:名称”【英文标题】:ReportViewer "Missing URL parameter: Name" 【发布时间】:2010-10-16 20:42:19 【问题描述】:

在一个 Web 应用程序中,我正在使用 ReportViewer 一直给我一个错误“缺少 URL 参数:名称”。我找到了原因,但没有解决办法。

导致报表查看器异常的 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="。

我注意到在大量的谷歌搜索中,有很多人有同样的问题,但没有一个解决方案。

【问题讨论】:

【参考方案1】:

听起来好像有什么东西在某处破坏了您的 URL。您是否有一个 Bluecoat 代理?我看到了一些关于 Bluecoat 破坏 URL 的内容。

如果是这种情况,并且您可以控制代理,那么您也许可以通过它获得一条隧道以用于您的报告。否则,您可能不得不重写您的 URL。

查看here 了解更多信息(线程中的最后一篇帖子有一个可能的解决方法)。

【讨论】:

我也遇到过同样的事情。像 BlueCoat 这样的有缺陷的代理服务器无法正确地对 URL 进行 html 解码,因此当您尝试调用 Request.Querystring 时,它找不到值。【参考方案2】:

您可以通过在每个请求开始时检查 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 标头(或我想,您可以只检查任何其他受影响产品的标题,这可能更安全。

【讨论】:

以上是关于ReportViewer“缺少 URL 参数:名称”的主要内容,如果未能解决你的问题,请参考以下文章

ReportViewer技巧汇总

C#,reportviewer控件,怎么填充整个窗口

reportviewer需要的3个引用

ReportViewer - 修改工具栏?

ReportViewer遇到的坑

ReportViewer 报表使用整理