Нет ссылки на бизнес-логику из контроллера API? - PullRequest
0 голосов
/ 22 мая 2018

Следующий код - это функция, которую я написал в своем контроллере 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 не имеет связанной ссылки на функцию бизнес-логики, которую я пытаюсь вызвать.Я что-то упустил с этим?У меня есть правильное утверждение, необходимое для подключения файла бизнес-логики.И я добавил ссылку на проект API для моего бизнеса.


Редактировать

Цель этих двух функций состояла в том, чтобы начать сборкуфайл Excel с помощью функций, созданных с использованием closedXML.Вся функция 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
}

Спасибо за любую помощь

1 Ответ

0 голосов
/ 22 мая 2018

Эти строки кажутся неправильными

    var wb = await rbs.GetSystemMaintenanceExcelFile(id);
    return CreateFileResponse(rbs.GetSystemMaintenanceExcelFile(id));

Первая строка вызывает асинхронную функцию, ждет, пока она не вернется, и сохраняет результаты в локальной переменной wb.Вторая строка снова вызывает эту асинхронную функцию, но на этот раз не ждет результата, а просто сразу возвращается.

Я подозреваю, что вы просто хотели это:

    var wbTask = rbs.GetSystemMaintenanceExcelFile(id);
    var wb = await wbTask;
    return CreateFileResponse(wb);

Хотя это не яснокак он выиграет от асинхронного вызова, потому что на переднем плане нет другой работы.

...