Какой тип объекта ответа я должен вернуть? Как объединить XML и кодированный HTML вместе в один объект ответа?
Нет такого встроенного типа результата. Однако было бы легко создать пользовательский MultipartResult
, который будет содержать XML + HTML (закодированный). Например:
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);
}