【问题标题】:Special character combination "?/" not being interpreted correctly in XML?特殊字符组合“?/”在 XML 中未正确解释?
【发布时间】:2016-02-24 21:52:13
【问题描述】:

对于我们的顶部菜单,我们使用了一个基本上从 XML 文件中读取的自定义控件。控件名称为SCS.MultiMenu

其中一个菜单项是一份报告,其链接如下:

http://MyServer/ReportServer/Pages/ReportViewer.aspx?/Folder/MyReport

使用该 URL 正确生成报告。

因此,在 XML 文件中,菜单项如下所示:

<MenuItem Text="My report"  
Url="http://MyServer/ReportServer/Pages/ReportViewer.aspx?/Folder/Report"
PostBack="False"/>

当我点击这个菜单项时,我被重定向到以下链接,这是不正确的:http://myserver/ReportServer/Pages/ReportViewer.aspx? 如您所见,它删除了问号后面的所有内容。

我尝试使用转义序列来查看它是否接受正确的 URL(即 ? 表示 问号 (?) 和 / 表示斜杠),但它继续剪切“?”之后的所有内容。我尝试过这样的事情:

http://MyServer/ReportServer/Pages/ReportViewer.aspx&#63;&#47;Folder/MyReport

可能是什么问题?我什至尝试将每个字符都切换为 escpae 序列,但没有奏效。

我认为这可能是此菜单控件中的错误,但它没有意义。

我包含了我尝试过的所有内容以及单击 URL 时的样子:

http://MyServer/ReportServer/Pages/ReportViewer.aspx?/Folder/MyReport
>> http://myserver/ReportServer/Pages/ReportViewer.aspx?

http://MyServer/ReportServer/Pages/ReportViewer.aspx?path=%2FFolder%2FReport
>> http://myserver/ReportServer/Pages/ReportViewer.aspx?path=/Folder/Report&

http://MyServer/ReportServer/Pages/ReportViewer.aspx&#63;&#47;Folder/MyReport
>> http://myserver/ReportServer/Pages/ReportViewer.aspx?

http://MyServer/ReportServer/Pages/ReportViewer.aspx?/Folder/MyReport=
>> http://myserver/ReportServer/Pages/ReportViewer.aspx?/Folder/MyReport=&

http://MyServer/ReportServer/Pages/ReportViewer.aspx?=/Folder/MyReport  
>> http://myserver/ReportServer/Pages/ReportViewer.aspx?=/Folder/MyReport&

谢谢

【问题讨论】:

  • /不能用于查询部分url,我觉得你的url应该是http://MyServer/ReportServer/Pages/ReportViewer.aspx?path=%2FFolder%2FReport 提示:WebUtility.UrlEncode("/Folder/Report")
  • 我不认为是/。如果我切换?/ 使/? 之前,则? 之后的所有内容都将被剪切。所以生成的链接看起来像http://myserver/ReportServer/Pages/ReportViewer.aspx/?
  • 百分比编码不起作用。我在ReportViewer.aspx 之后将每个/ 切换到%2F,它只需要我到http://myserver/ReportServer
  • 我做了,它实际上显示了整个链接,但最后有一个=&amp;。它会将我重定向到http://myserver/ReportServer/Pages/ReportViewer.aspx?/Folder/MyReport=&amp;。不幸的是,由于某种原因,最后的那两个字符显示了/ReportServer/的内容
  • 在地址栏中可以看到http://myserver/ReportServer/Pages/ReportViewer.aspx?/Folder/MyReport=&amp;,但是在浏览器中可以看到http://myserver/ReportServer的内容。

标签: c# asp.net xml asp.net-4.0


【解决方案1】:

library 以特殊方式处理菜单项的 url:

它从 url 中截取查询字符串并解析它:

  1. &amp; 拆分为单个参数
  2. = 拆分为名称值对。

(见QueryString.cs

如果在第 2 步中不存在 =,则参数将被静默丢弃,这就是为什么 你的查询字符串 /Folder/Report 消失了。

如果/Folder/Report==/Folder/Report 经受住这种处理并被您的服务器接受,您可以尝试。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-06
    • 2020-06-07
    • 1970-01-01
    • 2015-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    相关资源
    最近更新 更多