簡體   English   中英

如何使用MVC4 C#從ActionResult傳遞和讀取bitearray到另一個

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

我被要求從一個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動作結果內部構造各個內存流?

Json方法返回一個JsonResult ,而JsonResult具有一個包含字節緩沖區的Data屬性。

因此,在PdfSpider內部,您可以將ActionResult退回給JsonResult ,從Data獲取Byte緩沖區並重建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在他的評論中的意思……)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM