Настройте web.config для перенаправления / пересылки URL-адреса с определенным шаблоном на другой шаблон (с двоеточием и двойной косой чертой) - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть старая база данных, которая возвращает огромные тексты со ссылками на несуществующие URL-адреса в приложении ASP.NET. Ссылки выглядят так:

http://bbmag295:7777/$element://%7B57980C01-3974-49e5-91D4-49B843359557%7D

И должно быть преобразовано в это:

http://bbmag295:7777/ShowGlossary.aspx?id=57980C01-3974-49e5-91D4-49B843359557

Это означает, что шаблон между "$ element: //% 7B" и "% 7D" должен быть выбран и перенаправлен в ShowGlossary.aspx? Id = ...

Я написал следующее выражение RegMatch в C # для этого:

    string pattern2 = @"(element://{[^>]+})";

    MatchCollection matches2 = Regex.Matches(neuerString, pattern2);

    if (matches2.Count > 0)
    {
        foreach (Match m in matches2)
        {
            string toReplace = "$" + m.Groups[1].ToString();
            string guid = toReplace.ToString().Replace("$element://", "");

            neuerString = neuerString.Replace(toReplace, "ShowGlossary.aspx?id=" + guid); 

        }
    }

Я только что попробовал это в Web.Config, но не могу заставить работать URL-адрес совпадения:

              <rewrite>
                <rules>
                  <rule name="Query String Rewrite">  
                    <!--<match url="(element://{[^>]+})" />-->
                    <!--<match url="^Article/([0-9]+)/([_0-9a-z-]+)" />-->
                    <!--<action type="Rewrite" url="ShowGlossary.aspx?ID={R:1}"/>  -->
                    <!--<match url="^Article/([0-9]+)/([_0-9a-z-]+)" />-->
                    <match url="^\$element://([_0-9a-z-]+)" />
                    <action type="Rewrite" url="ShowGlossary.aspx?id={R:1}" />
                  </rule>      
                </rules>
              </rewrite>

Возможно ли, что: // Part делает невозможным такую ​​пересылку? Двоеточие (:) приводит к ошибке как «потенциально опасный запрос». Что может сделать id?

Наконец-то я начал работать с этим:

<?xml version="1.0"?>

<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->

<configuration>
  <system.webServer>
  <security> 
       <requestFiltering allowHighBitCharacters="true" allowDoubleEscaping="true" /> 
  </security>
  <rewrite>
    <rules>
      <rule name="Query String Rewrite">  
        <match url="^\$element:/\{([_0-9a-z-]+)\}" />
        <action type="Rewrite" url="ShowGlossary.aspx?id={R:1}" />
      </rule>      
    </rules>
  </rewrite>
  </system.webServer>
    <connectionStrings>
        <add name="EAPFile" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=~MDB/plm.eap" providerName="System.Data.SqlClient" />
        <add name="plmConnectionString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" providerName="System.Data.OleDb" />
    </connectionStrings>
    <system.web>
      <compilation debug="true" targetFramework="4.5" />
      <httpRuntime targetFramework="4.5" requestPathInvalidCharacters=""/>
      <pages validateRequest="false" />
    </system.web>
    <system.web.extensions>
      <scripting>
        <webServices>
          <jsonSerialization maxJsonLength="50000000"/>
        </webServices>
      </scripting>
    </system.web.extensions>
</configuration>

1.) Установите для requestPathInvalidCharacters значение "" 2.) 3.)

Моя следующая проблема - после перезаписи стили не загружаются: '(

1 Ответ

0 голосов
/ 05 сентября 2018

Наконец-то я заставил его работать, используя перенаправление вместо перезаписи.

<?xml version="1.0"?>

<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->

<configuration>
  <system.webServer>
  <security> 
       <requestFiltering allowHighBitCharacters="true" allowDoubleEscaping="true" /> 
  </security>
  <rewrite>
    <rules>
      <rule name="Query String Rewrite">  
        <match url="^\$element:/\{([_0-9a-z-]+)\}" />
        <action type="Redirect" url="ShowGlossary.aspx?id={R:1}" />
      </rule>      
    </rules>
  </rewrite>
  </system.webServer>
    <connectionStrings>
        <add name="EAPFile" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=~MDB/plm.eap" providerName="System.Data.SqlClient" />
        <add name="plmConnectionString" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" providerName="System.Data.OleDb" />
    </connectionStrings>
    <system.web>
      <compilation debug="true" targetFramework="4.5" />
      <httpRuntime targetFramework="4.5" requestPathInvalidCharacters=""/>
      <pages validateRequest="false" />
    </system.web>
    <system.web.extensions>
      <scripting>
        <webServices>
          <jsonSerialization maxJsonLength="50000000"/>
        </webServices>
      </scripting>
    </system.web.extensions>
</configuration>

После этого мне пришлось скачать модуль перезаписи, в противном случае я получил ошибку 500 в IIS (в Visual Studio она уже работала все время)

...