我被要求将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动作结果中构建单独的内存流?
答案 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()
/ 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();
// ...
}
使用它们/ p>
{{1}}
(这是@ bgs264在评论中的意思,我认为......)