2012-10-02 22 views
24

Estoy haciendo un Windows Service. El Service tiene que descargar algo todas las noches, y por eso quiero colocar el URI en la App.Config en caso de que luego necesite cambiarlo.Cómo escribir una cadena URI en App.Config

Quiero escribir un URI en mi App.Config. ¿Qué lo hace inválido y cómo debo abordar esto?

<appSettings> 
    <add key="fooUriString" 
     value="https://foo.bar.baz/download/DownloadStream?id=5486cfb8c50c9f9a2c1bc43daf7ddeed&login=null&password=null"/> 
</appSettings> 

Mis errores:

- Entity 'login' not defined 
- Expecting ';' 
- Entity 'password' not defined 
- Application Configuration file "App.config" is invalid. An error occurred 
+1

http://stackoverflow.com/questions/1328538/how-do-i-escape-ampersands-in-xml acaba de escapar del ampersand –

Respuesta

50

No se han codificado correctamente los símbolos de unión en su URI. Recuerde que app.config es un archivo XML, por lo que debe cumplir con los requisitos de XML para el escape (por ejemplo, & debe ser &amp;, debe ser &lt; y > debe ser &gt;).

En su caso, se debe tener este aspecto:

<appSettings> 
    <add 
     key="fooUriString" 
     value="https://foo.bar.baz/download/DownloadStream?id=5486cfb8c50c9f9a2c1bc43daf7ddeed&amp;login=null&amp;password=null" 
    /> 
</appSettings> 

Pero, en general, si desea almacenar una cadena que parecía "I <3 angle bra<kets & ampersands >>>" continuación, hacer esto:

<appSettings> 
    <add 
     key="someString" 
     value="I &lt;3 angle bra&lt;kets &amp; ampersands &gt;&gt;&gt;" 
    /> 
</appSettings> 

void StringEncodingTest() { 
    String expected = "I <3 angle bra<kets & ampersands >>>"; 
    String actual = ConfigurationManager.AppSettings["someString"]; 
    Debug.Assert.AreEqual(expected, actual); 
} 
+0

Gracias por las respuestas chicos. Fuiste el primero, así que aceptaré el tuyo, en un par de minutos cuando los dioses SO me lo permitan también. – radbyx

7

Intente utilizar: &amp; en lugar de & en la url

Cuestiones relacionadas