Javascript 通过后台任务c下载文件#
我最近将我的一个控制器转换为后台任务,该任务在线程完成后返回HTTPResponseMessage。我面临的问题是在任务完成后让下载弹出。我还实现了SignalR来跟踪进度。这是我的控制器代码:Javascript 通过后台任务c下载文件#,javascript,c#,asp.net,knockout.js,signalr,Javascript,C#,Asp.net,Knockout.js,Signalr,我最近将我的一个控制器转换为后台任务,该任务在线程完成后返回HTTPResponseMessage。我面临的问题是在任务完成后让下载弹出。我还实现了SignalR来跟踪进度。这是我的控制器代码: public async Task<IHttpActionResult> GetReportaync([FromUri] ReportRequestViewModel request) { var token = UnitOfWork.Start();
public async Task<IHttpActionResult> GetReportaync([FromUri] ReportRequestViewModel request)
{
var token = UnitOfWork.Start();
HostingEnvironment.QueueBackgroundWorkItem(CancellationToken =>
{
using (token)
{
try
{
HubFunctions.UpdateReportProgress(username, status);
var parameters = request.ToReportParams();
var report = ReportFactory.CreateReport(request.ReportExportType, IsVA());
var docStream = report.BuildReport(parameters);
if (request.SaveReport)
{
SaveDocumentToAmazon(request, report.FileName, docStream);
}
var GeneratedReport = GetFileAsResponseMessage(docStream.ToArray(), report.FileName, true);
ReportCacheDto generateReportDto1 = new ReportCacheDto()
{
Report = GeneratedReport,
Status = CacheConstants.Progress.Completed.ToString()
};
bool completed = SaveCacheReportProgress(key, generateReportDto1);
Request.CreateResponse(GeneratedReport);
HubFunctions.UpdateReportResult(new GenerateReportDto() { Message = "Import Completed", Success = true, Report = GeneratedReport }, username);
}
catch(Exception e)
{
LogHandler.LogError("An error occured", e);
Request.CreateResponse(HttpStatusCode.InternalServerError, e);
HubFunctions.UpdateReportResult(new GenerateReportDto() { Message = "Import Failed", Success = false, Report = Report }, username);
}
}
});
return Ok(new GenerateReportDto
{
Message = "Generate Started",
Success = true
});
}
基本上,信号器一旦完成返回:
public bool Success { get; set; }
public string Message { get; set; }
public HttpResponseMessage Report { get; set; }
现在我的问题是如何让报表参数作为下载弹出
ScorecardReportVM.prototype.ConnectToSignalRHub_ReportResult = function () {
var self = this;
var hub = $.connection.ReportResult;
hub.client.UpdateStatus = function (response) {
self.SetImportRunning(false);
var link = document.createElement('a');
link.href = response.Report;
document.body.appendChild(link);
link.click();
console.log(response);
};
};
public bool Success { get; set; }
public string Message { get; set; }
public HttpResponseMessage Report { get; set; }