访问 Url 重写规则中的特定 appsettings 键

Access specific appsettings key in Url Rewrite rules

我正在尝试访问 Url 重写规则中的 AppSettings Key,但我不确定如何访问它们。谁能帮帮我?

<appSettings>
  <add key="APIUrl" value="https://www.x.com/api/{R:1}" />
</appSettings>
<system.webServer>  
 <rewrite>
  <rules>
    <rule name="ProxyApi" stopProcessing="true">
      <match url="^api/?(.*)" />
      <serverVariables>
        <set name="HTTP_X_ORIGINAL_ACCEPT_ENCODING" value="{HTTP_ACCEPT_ENCODING}" />
        <set name="HTTP_X_ORIGINAL_HOST" value="{HTTP_HOST}" />
      </serverVariables>
      <action type="Rewrite" url="{APIUrl}" />
    </rule>
  </rules>
 </rewrite>
</system.webServer>

正在尝试访问 Url 重写规则

中的 APIUrl 密钥

我认为应用程序设置在您的配置文件中的其他地方不可用。

我发现了两种使用 msbuild 解决此问题的方法:

  • 使用xmlupdate task from MSBuild Community Tasks Project更新配置文件。我的工作已经在使用它,所以这是我走的路。看起来像:

    <XmlUpdate 
      XPath="//rule[@name='ProxyApi']/action/@url"
      XmlFileName="{Your Config File Location}"
      Value="https://www.x.com/api/{R:1}" />
    
  • 使用 XslTransformation Task 更新您的配置文件。此解决方案是内置的,但需要更多 XSL 知识。 Xsl 看起来像这样:

    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes"/>
    
      <!-- identity transform -->
      <xsl:template match="@*|node()">
        <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
      </xsl:template>
    
      <xsl:template match="//rule[@name='ProxyApi']/action/@url">
        <xsl:attribute name="url">
          <xsl:value-of select="'https://www.x.com/api/{R:1}'"/>
        </xsl:attribute>
      </xsl:template>
    
    </xsl:stylesheet>