39

I am making a Windows Service. The Service has to donwload something every night, and therefor I want to place the URI in the App.Config in case I later need to change it.

I want to write an URI in my App.Config. What makes it invalid and how should i approach this?

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

My errors:

- Entity 'login' not defined
- Expecting ';'
- Entity 'password' not defined
- Application Configuration file "App.config" is invalid. An error occurred
radbyx
  • 9,352
  • 21
  • 84
  • 127
  • 2
    http://stackoverflow.com/questions/1328538/how-do-i-escape-ampersands-in-xml just escape the ampersand – Iarek Oct 02 '12 at 07:09

3 Answers3

77

You haven't properly encoded the ampersands in your URI. Remember that app.config is an XML file, so you must conform to XML's requirements for escaping (e.g. & should be &amp;, < should be &lt; and > should be &gt;).

In your case, it should look like this:

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

But in general, if you wanted to store a string that looked like "I <3 angle bra<kets & ampersands >>>" then do this:

<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 );
}
Dai
  • 141,631
  • 28
  • 261
  • 374
  • 1
    Thanks for the answers guys. You were first, so I'll accept yours, in a couple of minuts when the SO gods allow me too. – radbyx Oct 02 '12 at 07:17
9

&amp; should work just fine, Wikipedia has a List of predefined entities in XML.

Raab
  • 34,778
  • 4
  • 50
  • 65
8

Try using: &amp; in place of & in the url

Kapil Khandelwal
  • 15,958
  • 2
  • 45
  • 52