public async Task <dynamic> OnExportHomeworkAsync(int hwID, bool mode, string token) { try { var t = await tokenService.GetTokenAsync(token); if (t == null) { throw new Exception("请先登录"); } var role = t.Role; if (role != UserRole.Admin) { role = await homeworkService.GetHWRoleAsync(hwID, t.UserID); } if (role == UserRole.Student) { throw new Exception("权限不足"); } var homeworkInfo = await homeworkService.GetHomeworkAsync(hwID); if (homeworkInfo.Status != HWStatus.Finished) { throw new Exception("作业尚未结束提交!"); } var tempFile = Path.GetTempFileName(); using (var sw = new StreamWriter(new FileStream(tempFile, FileMode.OpenOrCreate), Encoding.GetEncoding("gbk"))) { await homeworkService.WriteHWInfoAsync(sw, homeworkInfo); } var fileName = homeworkInfo.Title + " 作业成绩.csv"; new FileExtensionContentTypeProvider().TryGetContentType(fileName, out var contentType); if (mode) { var arr = Encoding.UTF8.GetBytes(fileName); var name = string.Empty; foreach (var b in arr) { name += string.Format("%{0:X2}", b); } HttpContext.Response.Headers.Add("Content-Disposition", new Microsoft.Extensions.Primitives.StringValues("attachment; filename = " + name)); } return(PhysicalFile(Path.GetFullPath(tempFile), contentType, fileName)); } catch (Exception e) { return(new { Res = false, Error = e.Message }); } }