【问题标题】:Web API: xml-stylesheet directive in XML-formatted responseWeb API:XML 格式响应中的 xml-stylesheet 指令
【发布时间】:2015-04-15 05:56:37
【问题描述】:

我有一个基于 MS Web API 2 的 Web 服务,它根据请求标头返回 XML 或 JSON 格式的响应(就像 Web 服务应该的那样)。除了某些端点,它们基本上提供已经存在的 XML 文档,与小的编辑。当在浏览器中查看这些文档时,它们会显示为原始 XML,以及“此 XML 文档似乎没有任何与之关联的样式信息”的消息。

事实上,这些 XML 文档确实具有样式表,并且样式表指令包含在原始文档中。 (样式表也可以通过 Web 服务器获得)但是,XmlDocument 对象不可序列化,因此我返回了 XmlDocument.DocumentElement 对象。正如XmlElements,这些是可序列化的,但不包括样式表规范。如何告诉 Web API 在请求响应中包含 xml-stylesheet 指令?

【问题讨论】:

    标签: xml xslt asp.net-web-api


    【解决方案1】:

    如果这些“已经存在的 XML 文档”只是文件,那么我更愿意设置对它们的直接 Web 服务器访问。

    但是,如果不是这种情况或不可接受,我会直接将 XML 作为来自 Web API 的字符串消息返回:

    public ResponseMessageResult Get()
    {
        var xmlString = "...";
        var content = new StringContent(xmlString, Encoding.UTF8, "application/xml");
        var message = new HttpResponseMessage {Content = content};
    
        return new ResponseMessageResult(message);
    }
    

    更新

    如果使用XmlDocument 是严格要求,那么可以使用StringWriter 将其转换为字符串:

    public ResponseMessageResult Get(int id)
    {
        var xmlDocument = new XmlDocument(); // Load actual XML document
    
        var stringWriter = new StringWriter();
        xmlDocument.Save(stringWriter);
    
        var content = new StringContent(stringWriter.ToString(), stringWriter.Encoding, "application/xml");
        var message = new HttpResponseMessage {Content = content};
    
        return new ResponseMessageResult(message);
    }
    

    【讨论】:

    • 谢谢——(部分)文件在我发送出去之前确实得到了一些编辑,而且我还有其他原因限制对物理目录的访问。
    • 另外,看起来这种方法需要我将 XmlDocument 重新序列化为字符串?但是 XmlDocument 是不可序列化的。所以这并不能回答问题。
    • XmlDocument 仍然可以正确转换为字符串。我更新了答案
    猜你喜欢
    • 2016-11-21
    • 1970-01-01
    • 2016-10-05
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 2011-10-10
    相关资源
    最近更新 更多