2016-03-12 9 views
0

У меня есть следующее правило перезаписи:URL IIS Rewrite

<rewrite> 
     <rules> 
      <rule name="FrontController" stopProcessing="true"> 
       <match url="^(.*)$" ignoreCase="false" /> 
       <conditions> 
        <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
       </conditions> 
       <action type="Rewrite" url="wcf/api.svc/auth/home" /> 
      </rule> 
     </rules> 
    </rewrite> 

В основном это переписывает все нефайловые Ссылки на веб-службе API вызовов, которая возвращает index.html в SPA при поддержке WCF.

Вышеперечисленное переписывание заканчивается, включая все параметры строки запроса, которые были включены в исходный URL. Что мне нужно сделать, так это включить исходный URL-адрес, например, «wcf/api.svc/auth/products», в качестве параметра строки запроса в переписанном URL-адресе, например «https://domain.com/wcf/api.svc/auth/products?enc=lkjewro8xlkz», который преобразуется в «https://domain.com/wcf/api.svc/auth/home?enc=lkjewro8xlkz&orig=wcf/api.svc/auth/products».

Возможно ли это, и если да, то какие изменения мне нужно сделать для его достижения? Я хотел бы, чтобы мое приложение WCF узнало об исходном URL-адресе, чтобы он мог настроить SPA для инициализации для определенного вида при загрузке.

Thanks

ответ

1

Это вполне возможно.

Необходимо ввести значение URL Encoded значения {REQUEST_URI} на URL-адрес для перезаписи.

<rewrite> 
    <rules> 
     <rule name="FrontController" stopProcessing="true"> 
      <match url="^(.*)$" ignoreCase="false" /> 
      <conditions> 
       <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 
      </conditions> 
      <action type="Rewrite" url="wcf/api.svc/auth/home?orig={UrlEncode:{REQUEST_URI}}" /> 
     </rule> 
    </rules> 
</rewrite> 

С этим правилом, в вашем WCF конечной orig параметр будет:

/wcf/api.svc/auth/products?enc=lkjewro8xlkz 

Если вы не хотите, чтобы строки запроса часть (? прил = lkjewro8xlkz), вам потребуется дополнительное условие для соответствия URI без строки запроса.

<rewrite> 
    <rules> 
     <rule name="FrontController" stopProcessing="true"> 
      <match url="^(.*)$" ignoreCase="false" /> 
      <conditions> 
       <add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" /> 

       <!-- match any character up to a question mark --> 
       <add input="{REQUEST_URI}" pattern="^[^\?]+" /> 
      </conditions> 

      <!-- {C:0} means the first match in conditions --> 
      <action type="Rewrite" url="wcf/api.svc/auth/home?orig={UrlEncode:{C:0}}" /> 
     </rule> 
    </rules> 
</rewrite> 

Теперь orig будет /wcf/api.svc/auth/products в конечной точке WCF.

Надеюсь, это поможет.

 Смежные вопросы

  • Нет связанных вопросов^_^