C# 在参数中添加空格时,查询字符串被打断
我有以下网址:C# 在参数中添加空格时,查询字符串被打断,c#,web-config,url-rewrite-module,C#,Web Config,Url Rewrite Module,我有以下网址: inspiratie/color collections/test/test/S%200502-B/test 以及web.config中的重写规则: <rule name="color2"> <match url="(kleur-en-inspiratie|inspiratie)/color-collections/([\S ^/]+)/([\S ^/]+)/([\S ^/]+)(/)?([\S ^/]*)" /> <action type=
inspiratie/color collections/test/test/S%200502-B/test
以及web.config
中的重写规则:
<rule name="color2">
<match url="(kleur-en-inspiratie|inspiratie)/color-collections/([\S ^/]+)/([\S ^/]+)/([\S ^/]+)(/)?([\S ^/]*)" />
<action type="Rewrite" logRewrittenUrl="true" appendQueryString="false" url="{R:1}/color-collections/color-detail?colorcollection={R:2}&colorfamily={R:3}&color={R:4}&colorname={R:6}" />
</rule>
规则生效后,url变为:
inspiratie/color collections?colorcollection=test&colorfamily=test&color=S&colorname=
但预期产出将是:
inspiratie/color collections?colorcollection=test&colorfamily=test&color=S 0502-B&colorname=test
正如您所看到的,如果在颜色代码中使用了空格,则查询字符串在颜色参数({R:4}
)之后被打断
当我在IIS中测试规则时,它工作正常并返回预期结果
我知道未转义的空格将不起作用,但希望转义的空格起作用。在您的案例中,问题是由于编码引起的。您需要为regexp使用
{UNENCODED\u URL}
变量。规则应该是这样的:
<rule name="color2">
<match url=".*" />
<conditions>
<add input="{UNENCODED_URL}" pattern="(kleur-en-inspiratie|inspiratie)/color-collections/([\S ^/]+)/([\S ^/]+)/([\S ^/]+)(/)?([\S ^/]*)" />
</conditions>
<action type="Rewrite" logRewrittenUrl="true" appendQueryString="false" url="{C:1}/color-collections/color-detail?colorcollection={C:2}&colorfamily={C:3}&color={C:4}&colorname={C:6}" />
</rule>
大约有8000种颜色变化。据我所知,使用您的解决方案,我需要在中列出您不需要的所有8000个URL。你为什么这么认为?它是一种通用的regexp,将{VAR0}/color collections/{VAR1}/{VAR2}/{VAR3}/{VAR4}
重写为{VAR0}/color collections?colorcollection={VAR1}&colorfamine={VAR2}&color={VAR3}&colorname={VAR4}