Skip to main content
 首页 » 编程设计

c#之使用 WebClient 调用服务时获取 JSON 而不是 XML 文件

2024年01月28日29mate10pro

我到处寻找答案,但到目前为止没有任何答案能回答我的问题。对于我正在制作的应用程序,我需要从 Bukkit.org 获取最新的 XML 工件。现在,如果我手动保存 XML 工件(通过我的浏览器),然后将其加载到我的程序中,它会正常工作,为我提供预期的格式化 XML 文件。

但是,如果我使用 WebClient 访问该文件,则会遇到问题,因为 Webclient 下载的文件甚至不是 XML 格式。我在下面放了一个测试用例。

static void manualLoad() 
    { 
        //local copy 
        XDocument doc = XDocument.Load("artifacts.xml"); 
 
        var lol = doc.Descendants("build_number"); 
 
        foreach (XElement e in lol) 
        { 
            Console.WriteLine(e.Value); //correct output 
        } 
    } 
 
    static void onlineLoad() 
    { 
 
        WebClient client = new WebClient(); 
 
        //save to local project folder 
        client.DownloadFile(new Uri("http://dl.bukkit.org/api/1.0/downloads/projects/bukkit/artifacts/") 
            , "C:\\...\\XMLTest\\XMLTest\\bin\\Debug\\lol.xml"); 
 
        XDocument doc = XDocument.Load("lol.xml"); //error thrown! 
 
 
    } 
 
    static void Main(string[] args) 
    { 
        manualLoad(); //works! 
        onlineLoad(); //throws XMLexception: Data at root level is invalid. 
        Console.ReadKey(); 
 
    } 

我试图访问的 XML 工件在这里:Bukkit.org XML Artifact

请您参考如下方法:

我没有尝试过您的代码,但您似乎必须将接受 header 设置为 application/xml - 看起来它默认为 json。

编辑: 您可以在 WebClient 上设置 header :

client.Headers.Add("accept", "application/xml");