代码之家  ›  专栏  ›  技术社区  ›  RoboDev

ReportViewer“缺少URL参数:名称”

  •  4
  • RoboDev  · 技术社区  · 16 年前

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

    导致报表查看器出现异常的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=”出于某种原因,它变为“&name=”。

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

    2 回复  |  直到 11 年前
        1
  •  2
  •   Brandon    16 年前

    听起来好像有什么东西把你的网址弄乱了。你有蓝色外套的代理吗?我看到一些关于BlueCoat破坏网址的事情。

    如果是这样的话,并且您可以控制代理,那么您就可以通过它为您的报告打一个隧道。否则,您可能需要重写您端的URL。

    检查 here 有关详细信息(线程中的最后一个日志有可能的解决方法)。

        2
  •  1
  •   NickG    11 年前

    您可以通过在每个请求开始时检查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;"), "&"));
            }
        }
    }
    

    我不确定其他代理服务器是否也有同样的问题,但是如果有,可以很容易地对其进行调整,以检查是否存在 & 在查询字符串中,您可以检查任何其他受影响产品的头,而不是检查BlueCoat头(或者我猜,您可以检查任何其他受影响产品的头,这可能更安全)。