C# - 当 webRequest 发送 XML 时,将 Base64 安全作为 Gif?

C# - Safe a Base64 as Gif, when the webRequest sends XML?

我发送了一个 WebRequest,并在我的内容中得到了一个带有 XML 代码的字符串作为响应。

        WebRequest request = WebRequest.Create("...");
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        Stream dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);
        string responseFromServer = reader.ReadToEnd();

        byte[] bytes = Convert.FromBase64String(responseFromServer);

        Image image;
        using (MemoryStream ms = new MemoryStream(bytes))
        {
            image = Image.FromStream(ms);
        }

        image.Save("File", System.Drawing.Imaging.ImageFormat.Gif);

问题是 "Convert.FromBase64String(responseFromServer)" 无法转换为 base 64,因为响应是:

       "<string xmlns="*LINK*"> 'content' </string>"

我可以删除这些标签或复制内容吗?

希望您能解决我的问题:)感谢您的帮助,抱歉英语不好 x)

您可以使用 XmlDocument..

        WebRequest request = WebRequest.Create("...");
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        Stream dataStream = response.GetResponseStream();
        StreamReader reader = new StreamReader(dataStream);
        XmlDocument doc = new XmlDocument();
        doc.Load(reader);
        byte[] bytes = Convert.FromBase64String(doc.GetElementsByTagName("string")[0].InnerText);

        System.Drawing.Image image;
        using (MemoryStream ms = new MemoryStream(bytes))
        {
            image = System.Drawing.Image.FromStream(ms);
        }

为此我建议使用 XmlReader

WebRequest request = WebRequest.Create("...");
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream dataStream = response.GetResponseStream();
//StreamReader reader = new StreamReader(dataStream);
//string responseFromServer = reader.ReadToEnd();

//byte[] bytes = Convert.FromBase64String(responseFromServer);

using (var reader = XmlReader.Create(dataStream))
{
    reader.Read();
    reader.Read();
    string base64 = reader.Value;
    byte[] bytes = Convert.FromBase64String(base64);
    Image image;
    using (MemoryStream ms = new MemoryStream(bytes))
    {
        image = Image.FromStream(ms);
        image.Save("File", System.Drawing.Imaging.ImageFormat.Gif);
    }
}

有一种方法可以直接从元素值中的 Base64 进行转换,但是您需要知道或多或少需要阅读整个流才能做到这一点的事情(您可以查看编辑历史记录看看我如何解决这个问题 ;)。