2014-05-17 8 views
8

Nel mio web.config ho il seguenteC'è un modo per "inserire" una nuova sezione in Web.Config usando le trasformazioni?

<system.webServer> 

    <modules> 
     **some code** 
    </modules> 
    <handlers> 
     **some code**  
    </handlers> 

    </system.webServer> 

Come trasformo in modo da poter iniettare una nuova sezione sub per la "sicurezza" in "system.webServer"? Tutto ciò che ho provato e cercato finora è fallito.

Ciò che desidero è stata di:

<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

Per quanto ne so, web.config viene letto solo una volta all'avvio dell'applicazione, anche se fosse possibile, ciò non significa che diventerà effettivo fino al riavvio dell'app. – Dalorzo

+0

La modifica di 'web.config' attiverà il riavvio dell'app. Ovviamente potresti generarlo da una trasformazione durante la distribuzione, ma sembra che l'OP voglia utilizzare un indirizzo IP basato sul server stesso. Ciò potrebbe essere possibile (a seconda della configurazione di hosting) anche se non ha nulla a che fare con XSLT in quanto tale. – harpo

+0

@harpo Per chiarire, voglio essere in grado di aggiungere la sezione durante la distribuzione utilizzando le trasformazioni. Saluti Paolo –

risposta

17

ha trovato la soluzione che ha funzionato. Entro il mio file Web.Azure.Config ho dovuto aggiungere il seguente:

<system.webServer> 
    <security xdt:Transform="Insert"> 
     <ipSecurity allowUnlisted="false" denyAction="NotFound"> 
     <add allowed="true" ipAddress="10.148.176.10" /> 
     </ipSecurity> 
    </security> 
    </system.webServer> 

Ho provato questo prima di inviare la domanda, ma a causa di un errore di battitura in un'altra parte del web.config è stato erroring.

0

Sembra che la soluzione migliore per la distribuzione sia specificare in Web.Azure.Config, come specificato nella risposta.

Solo per divertimento, postare questa soluzione XSLT che è possibile utilizzare anche per aggiungere l'elemento <security> con l'indirizzo IP se non esisteva, o richiamare in seguito per aggiungere ulteriori voci. Impostare l'indirizzo IP nel parametro ipAddress durante l'esecuzione. Se non è specificato ipAddress, non fa nulla.

<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> 
Problemi correlati