39

我正在制作一个Windows Service. 必须每晚下载一些东西,因此我想将ServiceURI 放在 App.Config 中,以防我以后需要更改它。

我想在我的 App.Config 中编写一个 URI。是什么使它无效,我应该如何处理?

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

我的错误:

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

3 回答 3

75

您没有正确编码 URI 中的 & 符号。请记住,这app.config是一个 XML 文件,因此您必须符合 XML 的转义要求(例如&should be &amp;<should be&lt;>should be &gt;)。

在您的情况下,它应该如下所示:

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

但总的来说,如果你想存储一个看起来像这样的字符串,"I <3 angle bra<kets & ampersands >>>"那么这样做:

<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 );
}
于 2012-10-02T07:10:04.940 回答
9

&amp;应该可以正常工作,维基百科有一个XML 中预定义实体的列表

于 2012-10-02T07:13:02.733 回答
8

尝试使用:&amp;代替&在网址中

于 2012-10-02T07:12:37.633 回答