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}&amp;colorfamily={R:3}&amp;color={R:4}&amp;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}&amp;colorfamily={C:3}&amp;color={C:4}&amp;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}