如何使用 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 在他的评论中的意思,我认为...)
有人要求我将 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 在他的评论中的意思,我认为...)