在Url Rewrite规则中访问特定的appsettings键

时间:2017-04-17 21:08:23

标签: url-rewriting web-config web.config-transform

我正在尝试访问Url Rewrite规则中的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>

尝试访问UrlRewrite规则中的APIUrl键

1 个答案:

答案 0 :(得分:1)

我认为appsettings在配置文件的其他地方不可用。

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

  • 使用xmlupdate中的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>