4

ReportViewer に取り組んでいる Web アプリケーションで、「Missing URL parameter: 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=」になります。

多数のグーグル検索で、多くの人が同じ問題を抱えているが、1つの解決策ではないことに気づきました.

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;"), "&"));
        }
    }
}

他のプロキシサーバーに同じ問題があるかどうかはわかりませんが、もしそうなら&、BlueCoat ヘッダーをチェックする代わりに、QueryString 内の存在をチェックするように簡単に適応させることができます (または、単に影響を受ける他の製品のヘッダーを確認してください。より安全である可能性があります。

于 2013-08-30T15:19:20.027 に答える