C# EPiServer,id作为查询字符串中的键,id被url重写器劫持,是否对指定位置使用重写器?

C# EPiServer,id作为查询字符串中的键,id被url重写器劫持,是否对指定位置使用重写器?,c#,asp.net,url-rewriting,query-string,episerver,C#,Asp.net,Url Rewriting,Query String,Episerver,我重写了一个旧的应用程序,它有相当多的外部应用程序重定向到包含?id={someid}查询字符串的特定url。。然而。。episerver似乎对id键做了一些操作。。因为Request.QueryStrings.AllKeys中从来没有显示过。所以我猜epi正在做某种url重写之类的事情。。是否有任何方法可以绕过此问题,并且只能对特定的页面/位置使用id键?查询字符串参数id由EPiServer保留。你需要在EPi接触它之前检查它 更新:如果您升级到EPi 7.5,查询参数“ID”将不再由EPi

我重写了一个旧的应用程序,它有相当多的外部应用程序重定向到包含?id={someid}查询字符串的特定url。。然而。。episerver似乎对id键做了一些操作。。因为Request.QueryStrings.AllKeys中从来没有显示过。所以我猜epi正在做某种url重写之类的事情。。是否有任何方法可以绕过此问题,并且只能对特定的页面/位置使用id键?

查询字符串参数id由EPiServer保留。你需要在EPi接触它之前检查它


更新:如果您升级到EPi 7.5,查询参数“ID”将不再由EPi处理,除非您注册一个EPiServer.Web.Routing.ClassicLinkRoute。

我建议使用IIS 7 url重写模块将ID查询字符串键转换为不会与EPiServer冲突的内容,在url重写提供程序内转换友好url后,as id用于EPIServer内部url中的页面id。 IIS url重写模块将使您有机会在点击EPiServer之前进行更改

您可以编写一个正则表达式来捕获id参数,这样就可以将以下规则添加到重写配置中

    <rule name="QueryString">
      <match url="(.*)" />
      <conditions logicalGrouping="MatchAll" trackAllCaptures="false">
        <add input="{QUERY_STRING}" pattern="(.*)id=([a-zA-Z0-9_-]+)(.*)" />
      </conditions>
      <action type="Rewrite" url="{R:1}?{C:1}oldid={C:2}{C:3}" appendQueryString="false" />
    </rule>


您使用的是哪种EPi版本?