【问题标题】:asp.net consecutive are backslashes removed from urlasp.net 连续是从 url 中删除的反斜杠
【发布时间】:2010-10-28 02:12:20
【问题描述】:

我在我的 ASP.NET Web 应用程序中遇到了一个问题,即故意从请求 URL 中删除连续的反斜杠。

我会要求类似的东西: 本地主机/页面/A//C

但是当请求到达页面时,原始 url 是: 本地主机/页面/A/C

不确定这是否是罪魁祸首,但我确实有一个 Url Rewite 正则表达式,这是规则:

   <system.webServer>
        <rewrite>
            <rules>
                <rule name="Games QueryString">
                  <match url="^(Page|OtherPage).aspx(?:/([\w-_()]+)(?:/([\w-_() ]*)(?:/([\w-_()]+))?)?)?$" />
                  <action type="Rewrite" url="{R:1}.aspx?1={R:2}&amp;2={R:3}&amp;3={R:4}" appendQueryString="false" />
                </rule>
            </rules>
        </rewrite>
    </system.webServer>

因此,重写后,查询字符串以 Page.aspx?1=A&2=C&3= 的形式出现 什么时候应该是 Page.aspx?1=A&2=&3=C

请帮忙!!

【问题讨论】:

  • 为什么需要在 url 中连续使用斜杠?
  • 页面后的每个组都是三部分查询字符串的一个单独部分;页/1/2/3。如果用户选择了第 1 部分和第 3 部分,则 2 应返回为空,因此 Page.aspx/a//c

标签: asp.net url-rewriting request.querystring


【解决方案1】:

您可以将您的正则表达式更改为如下内容:

^(Page|OtherPage).aspx(?:/+([\w-_()]+)(?:/+([\w-_() ]*)(?:/+([\w-_()]+))?)?)?$

我在你的匹配后添加了一个“+”到“/”,这将它们从接受单个“/”更改为接受一个或多个。

另外,我终其一生都无法弄清楚为什么要在其中添加额外的斜线。可能是个坏主意。出于任何原因重新考虑这样做。

【讨论】:

  • 这将产生与我现在得到的相同的结果。奇怪的是,我的正则表达式应该可以工作,如果你在正则表达式测试中运行它,你会看到 Page.aspx/a//c 将匹配到 where {R:1}='Page', {R:2}= 'a'、{R:3}='' 和 {R:4}=''c。一旦重写,它应该产生 Page.aspx?1=A&2=&3=C
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-29
  • 1970-01-01
  • 2019-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多