Asp.net core 如何使用html和xml返回多部分内容

Asp.net core 如何使用html和xml返回多部分内容,asp.net-core,asp.net-web-api,asp.net-core-webapi,Asp.net Core,Asp.net Web Api,Asp.net Core Webapi,我必须在.NETCore2.2中重新编写一个web服务,该服务必须返回一个包含XML和base-64编码HTML的多部分响应。当前的服务是一个非常旧的java程序,没有文档 该请求来自无法更改的旧服务,必须接收HTML4.01作为响应。实际样本如下所示 我应该返回什么样的响应对象 如何将XML和编码的HTML组合成一个响应对象 我不希望有人为我编写代码,但我希望能在开始时得到一些帮助 样本响应 --75df5969-8400-11d5-c000-0021FFFF97 内容类型:text/xml;

我必须在.NETCore2.2中重新编写一个web服务,该服务必须返回一个包含XML和base-64编码HTML的多部分响应。当前的服务是一个非常旧的java程序,没有文档

该请求来自无法更改的旧服务,必须接收HTML4.01作为响应。实际样本如下所示

  • 我应该返回什么样的响应对象
  • 如何将XML和编码的HTML组合成一个响应对象
  • 我不希望有人为我编写代码,但我希望能在开始时得到一些帮助

    样本响应
    --75df5969-8400-11d5-c000-0021FFFF97
    内容类型:text/xml;charset=“UTF-8”
    内容id:XMLROOT
    0
    --75df5969-8400-11d5-c000-0021FFFF97
    内容类型:应用程序/html
    内容id:Inquiry.html
    内容描述:对视图查询的响应
    PcFet0NuvFieHutuwGuFvCt9xMvL0RurcBive1midQumDgHvHbNpDgBmFsLy9FTII+CgO8SfRnTd4KpEhFqQ+CjxNrBigH0DdTzxF1氧基IkNvBnRbNrLbNqTvLqLvLzZgW9UdGvDgVdDgV9OdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdGdG2.一个中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国的一家中国D一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府在一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个中国政府的一个准准准准准准准准准准准准准准准准中国2 2 2 2号中国政府的准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准准JPHRKIEJHQ09MT1I9IINMZMZMYIPOJCQK8VEFCTEUGQK9SREVSpsixiIBDRUXMERELORZ0IMIIGQ0VMTFNQQUNJTK9IJIIFDJRFRIPPI3MDAIPGOJCQKJPFRSPJXURCBDT0XTUY2VUDGVYIBCR0NPTE9SPSIJZMZMZMIJ4KCKJQLUZN0IG1LC3NHZ2UGCGKKJQK8REPJVVFI+CGKKJKKKJJKKJJJJKKKK8REPJVVFI+CGKKKJKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJ=
    --75df5969-8400-11d5-c000-0021FFFF97--
    
    我应该返回什么样的响应对象?如何将XML和编码的HTML组合成一个响应对象

    没有这样的内置结果类型。但是,创建包含XML+HTML(编码)的自定义
    MultipartResult
    将很容易。例如:

    public class XmlAndEncodedHtmlMultipartResult : IActionResult
    {
        private StringContent _xmlContent;
        private StringContent _htmlContent;
        private MultipartContent _multipartContent=new MultipartContent(Subtype); // the final content
        public static string Subtype = "my-xml+html" ;                            // `content-type: multipart/{Subtype}`
    
        public XmlAndEncodedHtmlMultipartResult SetXmlContent(string xml, string contentId = "XMLROOT")
        {
            var xmlContent = new StringContent(xml, Encoding.UTF8, "text/xml");
            xmlContent.Headers.Add("Content-id", contentId);
            this._xmlContent = xmlContent;
            return this;
        }
    
        public XmlAndEncodedHtmlMultipartResult SetEncodedHtmlContent(string rawHtml,string contentId="Inquiry.html", string description="Response to View Inquiry")
        {
            var bytes= Encoding.UTF8.GetBytes(rawHtml); 
            var encodedHtml = Convert.ToBase64String(bytes);
            var htmlContent = new StringContent(encodedHtml, Encoding.UTF8, "application/html");
            htmlContent.Headers.Add("Content-id", contentId);
            htmlContent.Headers.Add("Content-description",description);
            this._htmlContent = htmlContent;
            return this;
        }
    
        public async Task ExecuteResultAsync(ActionContext context)
        {
            if(this._htmlContent ==null || this._xmlContent ==null){ throw new Exception("html content & xml must be null");}
            this._multipartContent.Add(this._xmlContent);
            this._multipartContent.Add(this._htmlContent);
            var response = context.HttpContext.Response;
            response.ContentType = this._multipartContent.Headers.ContentType.ToString();
            // ... custom other headers as you like
            await _multipartContent.CopyToAsync(response.Body);
        }
    }
    
    在您的操作中,只需按如下方式调用它:

    public IActionResult Privacy()
    {
        var xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><XMLROOT><Service><StatusCd>0</StatusCd></Service></XMLROOT>";
        var html = "<html><head></head><body>hello,world</body></html>";
        return new XmlAndEncodedHtmlMultipartResult().SetEncodedHtmlContent(html).SetXmlContent(xml);
    }
    
    public IActionResult Privacy()
    {
    var xml=“0”;
    var html=“你好,世界”;
    返回新的xmlandencodedhmlmultipartresult().SetEncodedHtmlContent(html).SetXmlContent(xml);
    }
    
    我想您可以返回多状态代码(207)参见:。@Umang谢谢您的建议。但似乎
    207
    仅用于WebDAV?@itminus,我今天将尝试此解决方案,并用完整的代码示例发回。Thanks@itminus,您的解决方案非常有效。我没有发布代码,因为它与您的代码完全相同。我认为您没有分享完整的响应。能否提供状态代码和响应标题?我觉得你的旧服务返回207状态码,允许返回多个内容。
    public IActionResult Privacy()
    {
        var xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><XMLROOT><Service><StatusCd>0</StatusCd></Service></XMLROOT>";
        var html = "<html><head></head><body>hello,world</body></html>";
        return new XmlAndEncodedHtmlMultipartResult().SetEncodedHtmlContent(html).SetXmlContent(xml);
    }