如何使用MVC4 C#

时间:2015-07-29 07:36:54

标签: c# asp.net-mvc-4 bytearray memorystream actionresult

我被要求将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返回的值,并在spider动作结果中构建单独的内存流?

1 个答案:

答案 0 :(得分:1)

Json方法返回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);

GetStreamA()

更好的解决方案是(imo)编写内部函数GetStreamB()PdfA()并由PdfB() / PdfSpiderprivate 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(); // ... } 使用它们/ p>

{{1}}

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