4

在一个 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=”它变成了“&Name=”。

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

4

2 回答 2

2

听起来有些东西正在某个地方破坏您的 URL。您是否有一个 Bluecoat 代理?我看到了一些关于 Bluecoat 破坏 URL 的内容。

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

在这里查看更多信息(线程中的最后一篇文章有​​一个可能的解决方法)。

于 2009-04-03T21:43:24.467 回答
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 标头(或者我猜,你可以只是检查任何其他受影响产品的标题,这可能更安全。

于 2013-08-30T15:19:20.027 回答