[英]No reference to business logic from api controller?
以下代碼是我在API控制器中編寫的用於調用業務邏輯的函數:
[HttpGet]
[Route("api/file/{id}")]
public async Task<HttpResponseMessage> GetSysMaintExcelFile(int id)
{
var wb = await rbs.GetSystemMaintenanceExcelFile(id);
return CreateFileResponse(rbs.GetSystemMaintenanceExcelFile(id));
}
我要調用的業務邏輯如下:
public async Task<byte[]> GetSystemMaintenanceExcelFile(int id)
{
Systems sysRec = await dataAccess.GetSystemById(id);
return BuildSysMaintExcelFile(sysRec);
}
使我感到困惑的是, HTTPGET
函數沒有與我要調用的業務邏輯函數的關聯引用。 我有什么想念的嗎? 我有連接業務邏輯文件所需的正確using語句。 我也為我的業務添加了對API項目的引用。
編輯
這兩個函數的目的是通過使用closeXML構建的函數開始構建excel文件。 通過我的業務邏輯功能,整個closedXML函數如下:
public class ReportBS : IReportsBS
{
private IAppDataAccess dataAccess;
private IAuthManager authManager;
#region Constructor
public ReportBS(IAppDataAccess da, IAuthManager am)
{
this.dataAccess = da;
this.authManager = am;
}
#endregion
#region System Maintenance Reports
public async Task<byte[]> GetSystemMaintenanceExcelFile(int id)
{
Systems sysRec = await dataAccess.GetSystemById(id);
return BuildSysMaintExcelFile(sysRec);
}
public byte[] BuildSysMaintExcelFile(Systems dataRec)
{
//Creating the workbook
const int dataRowStart = 3;
string templateName = "~/App_Data/SystemMaintenance_Template.xlsx";
var workbook = new XLWorkbook(templateName);
var worksheet = workbook.Worksheet(1);
string folderPath = @"~\Downloads\";
if (!Directory.Exists(folderPath))
{
Directory.CreateDirectory(folderPath);
}
string fileName = templateName + folderPath + "SystemMaintenance_" + DateTime.Now.ToString("yyyyMMddHHmm") + ".xlsx";
var dt = BuildSysDetailLoaExcelTable(dataRec, fileName);
worksheet.Cell(dataRowStart, 3).InsertData(dt.AsEnumerable());
workbook.SaveAs(fileName);
using (var ms = new MemoryStream())
{
workbook.SaveAs(fileName);
return ms.ToArray();
}
}
//Building the tables
private DataTable BuildSysDetailLoaExcelTable(Systems record, string fileName)
{
DataTable dt = new DataTable(fileName);
dt.Columns.Add("systemName", typeof(string));
dt.Columns.Add("isActive", typeof(bool));
dt.Columns.Add("localIAO", typeof(bool));
dt.Columns.Add("localStaff", typeof(bool));
dt.Columns.Add("informationOfficerRequired", typeof(bool));
dt.Columns.Add("iaoRequired", typeof(bool));
dt.Columns.Add("IAOs", typeof(string));
dt.Columns.Add("StaffProcessors", typeof(string));
dt.Columns.Add("StaffRevalidators", typeof(string));
var dr = dt.NewRow();
dr[0] = record.systemName;
dr[1] = record.isActive;
dr[2] = record.localIAO;
dr[3] = record.localStaff;
dr[4] = record.informationOfficerRequired;
dr[5] = record.iaoRequired;
dr[6] = record.IAOs;
dr[9] = record.StaffProcessors;
dr[11] = record.StaffRevalidators;
return dt;
}
#endregion
}
謝謝你的幫助
這些行似乎不正確
var wb = await rbs.GetSystemMaintenanceExcelFile(id);
return CreateFileResponse(rbs.GetSystemMaintenanceExcelFile(id));
第一行調用async函數,一直等到它返回並將結果存儲在局部變量wb
。 第二行再次調用此異步函數,但是這次不等待結果,而是立即返回。
我懷疑您只是想要這樣:
var wbTask = rbs.GetSystemMaintenanceExcelFile(id);
var wb = await wbTask;
return CreateFileResponse(wb);
盡管尚不清楚它將如何從異步調用中受益,但因為在前台沒有其他工作要做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.