在我的Web.Config中,我有以下内容
<system.webServer>
<modules>
**some code**
</modules>
<handlers>
**some code**
</handlers>
</system.webServer>
如何对其进行转换,以便将“安全性”的新子节点注入“system.webServer”?到目前为止,我尝试和搜索的所有内容都失败了。
我想要的是如下所示:
<system.webServer>
<modules>
**some code**
</modules>
<handlers>
**some code**
</handlers>
<security>
<ipSecurity allowUnlisted="false" denyAction="NotFound">
<add allowed="true" ipAddress="10.148.176.10" />
</ipSecurity>
</security>
</system.webServer>
答案 0 :(得分:32)
找到有效的解决方案。在我的Web.Azure.Config文件中,我必须添加以下内容:
<system.webServer>
<security xdt:Transform="Insert">
<ipSecurity allowUnlisted="false" denyAction="NotFound">
<add allowed="true" ipAddress="10.148.176.10" />
</ipSecurity>
</security>
</system.webServer>
我在发布问题之前尝试了这个,但由于Web.Config的另一部分出现了拼写错误,这是错误的。
答案 1 :(得分:0)
似乎部署的最佳解决方案是在Web.Azure.Config中指定,如您在答案中指定的那样。
只是为了好玩,发布这个XSLT解决方案,您也可以使用它来添加带有IP地址的<security>
元素(如果它不存在),或者稍后调用以添加其他条目。执行时在ipAddress
参数中设置IP地址。如果未指定ipAddress
,则不执行任何操作。
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:param name="ipAddress"/>
<xsl:template match="@*|node()">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
</xsl:copy>
</xsl:template>
<!--Create security/ipSecurity with specified IP address,
if specified in param-->
<xsl:template match="system.webServer[not(security)]">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<xsl:if test="$ipAddress">
<security>
<ipSecurity allowUnlisted="false" denyAction="NotFound">
<add allowed="true" ipAddress="{$ipAddress}" />
</ipSecurity>
</security>
</xsl:if>
</xsl:copy>
</xsl:template>
<!--Add an allowed IP address to existing security/ipSecurity entry,
if IP address is specified in param -->
<xsl:template match="security/ipSecurity">
<xsl:copy>
<xsl:apply-templates select="@*|node()"/>
<xsl:if test="$ipAddress">
<add allowed="true" ipAddress="{$ipAddress}" />
</xsl:if>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>