c# - 没有从 api 控制器引用业务逻辑?
问题描述
以下代码是我在 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 项目的引用。
编辑
这两个函数的目的是通过使用 closedXML 构建的函数开始构建 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));
第一行调用异步函数,等待它返回并将结果存储在局部变量wb
中。第二行再次调用这个异步函数,但这一次不等待结果,而是立即返回。
我怀疑你只是想要这个:
var wbTask = rbs.GetSystemMaintenanceExcelFile(id);
var wb = await wbTask;
return CreateFileResponse(wb);
虽然尚不清楚它将如何从异步调用中受益,因为在前台没有完成其他工作。
推荐阅读
- sql - Impala 查询为外部连接创建日期表
- python - 理解递归堆栈 sum_integers
- neovim - 全新安装后Vim扩展coc产生错误?
- c++ - '
':无法从“初始化列表”转换为“机器人” - javascript - 查找两个数组之间的预定义组合
- laravel - Laravel phpunit 测试需要访问 API 服务进行用户验证
- python - 在 Python 列表中大量查找随机索引的最快方法是什么?
- java - spring WebClient 如何从使用 http/1.1 的 spring webflux 服务器接收流数据
- javascript - 什么事件最适合检索会话存储值
- c - 声明但未定义的函数的返回类型和参数中的不完整类型