2017-10-11 10 views
0

J'ai quelques fonctions de contrôleur api web qui ressemblent à ce qui suit.Net Web Api - mess ArrayBuffer avec d'autres appels api

[HttpGet] 
    [Route("GetCycle")] 
    public HttpResponseMessage GetCycle(string type) { 
     try 
     { 
      Cycle oCycleClass = Data.GetCycle(type); 
      return Request.CreateResponse(oCycleClass); 

     } 
     catch (Exception ex) 
     { 
      return Request.CreateErrorResponse(System.Net.HttpStatusCode.BadRequest, ex.Message); 
     } 

    } 

Ceci est un autre contrôleur qui fonctionne comme prévu.

[HttpPost] 
    [Route("GetDataDownload")] 
    public HttpResponseMessage GetDataExport([FromBody]DataObject objectData) 
    { 
     try 
     { 
      byte[] excelData = Data.GetDataExport(objectData); 

      String timeStamp = DateTime.Now.ToString("yyyy-MM-dd HH mm ss"); 

      HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK); 
      response.Content = new ByteArrayContent(excelData); 
      response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); 
      response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment"); 
      response.Content.Headers.ContentDisposition.FileName = "DataExport - " + focalData.User.ID + " - " + timeStamp + ".xlsx"; 

      return response; 
     } 
     catch (Exception ex) 
     { 
      return Request.CreateErrorResponse(System.Net.HttpStatusCode.BadRequest, ex.Message); 
     } 
    } 

L'erreur vient après que j'exécute tout autre contrôleur après la fonction GetDataExport. Il semble que le HttpResponseMessage soit corrompu.

Par exemple:

1. Execute GetCycle - Résultat: Succès

2. Exécuter GetDataExport - Résultat: Succès

3. ExécuterGetCycle - Résultat: fonction Fail


GetDataExport ci-dessous

public static byte[] GetDataExport(DataObject dataObject) 
    { 
     DataTable view = Common.ConvertToDataTable<View>(dataObject.Views); 
     string filter = Common.ConvertFiltersToSQLStatement(dataObject.Filters); 

     DataSet ds; 

     if (dataObject.DownloadWithFilters) 
     { 
      ds = InterfaceDataClass.GetEmployees(dataObject.CycleId, view, filter, 1, 0, true); 
     } 
     else 
     { 
      ds = InterfaceDataClass.GetEmployees(dataObject.CycleId, view, string.Empty, 1, 0, true); 
     } 

     using (ExcelPackage pck = new ExcelPackage()) 
     { 
      //Create the worksheet 
      ExcelWorksheet ws = pck.Workbook.Worksheets.Add("Employees"); 

      //Load the datatable into the sheet, starting from cell A1. Print the column names on row 1 
      ws.Cells["A1"].LoadFromDataTable(ds.Tables[0], true); 

      //Format the header column 
      using (ExcelRange rng = ws.Cells["A1:BB1"]) 
      { 
       rng.Style.Fill.PatternType = ExcelFillStyle.Solid; 
       rng.Style.Fill.BackgroundColor.SetColor(Color.FromArgb(122, 122, 122)); 
       rng.Style.Font.Color.SetColor(Color.WhiteSmoke); 
      } 

      return pck.GetAsByteArray(); 
     } 
    } 

Le ExcelPackage provient d'une bibliothèque appelée EPPlus

+0

Y at-il une erreur enregistrée? Assurez-vous également que vous fermez les ressources avec soin. –

+0

Quelle serait la bonne façon de fermer les ressources? –

+0

Je suppose que vous accédez à un flux de fichier, veuillez le fermer dans ce cas. Aussi, si vous pouvez partager le code de la méthode GetDataExport, ce serait utile –

Répondre

0

L'API avait pas d'erreur du tout. Le problème était dans la façon dont l'API était appelée et exécutée.