如何使用 MVC 4 C# 将字节数组从 ActionResult 传递到另一个字节数组

How to pass and read a bitearray from ActionResult to Another using MVC4 C#

有人要求我将 MemoryStream 从一个 ActionResult 传递到另一个。 为此,我尝试将一个字节数组从一个操作结果传递到另一个操作结果,这是我的代码。

private MemoryStream GetSamplePdf(string name)
{
    var ms = new MemoryStream();
    using (var doc = new Document(PageSize.A4))
    {
        using (var writer = PdfWriter.GetInstance(doc, ms))
        {
            writer.CloseStream = false;
            doc.Open();
            doc.Add(new Paragraph(name));
            doc.Close();
        }
    }
    return ms;
}

public ActionResult PdfSpider()
{
    var elem1 = PdfA();
    var elem2 = PdfB();

    return new EmptyResult();
}

public ActionResult PdfA()
{
    var Pdfa = GetSamplePdf("A");

    return Json(Pdfa.GetBuffer(), JsonRequestBehavior.AllowGet);
}

public ActionResult PdfB()
{
    var Pdfb = GetSamplePdf("B");
    return Json(Pdfb.GetBuffer(), JsonRequestBehavior.AllowGet);
}

我如何读取从 Pdfa 和 Pdfb 返回的值并在蜘蛛操作结果中构建单独的内存流?

Json方法returns一个JsonResult,它又有一个包含字节缓冲区的Data属性。

因此,在 PdfSpider 中,您可以将 ActionResult 转换回 JsonResult,从 Data 获取字节缓冲区并重建 MemoryStream

var bytebufferA = (byte[])((JsonResult)PdfA()).Data;
var bytebufferB = (byte[])((JsonResult)PdfB()).Data;
var streamA = new MemoryStream(bytebufferA);
var streamB = new MemoryStream(bytebufferB);

更好的解决方案是 (imo) 编写内部函数 GetStreamA()GetStreamB() 并由 PdfA()/PdfB()PdfSpider 使用它们喜欢

private MemoryStream GetStreamA() {
  return GetSamplePdf("A");
}

public ActionResult PdfA() {
  return Json(GetStreamA().GetBuffer(), JsonRequestBehavior.AllowGet);
}

// ...
// Same for PdfB()/GetStreamB()
// ...

public ActionResult PdfSpider() {
  var streamA = GetStreamA();
  var streamB = GetStreamB();
  // ... 
}

(这就是@bgs264 在他的评论中的意思,我认为...)