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
Y at-il une erreur enregistrée? Assurez-vous également que vous fermez les ressources avec soin. –
Quelle serait la bonne façon de fermer les ressources? –
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 –