public async Task <dynamic> OnExportAllExamsAsync(int courseID, 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 examService.GetCourseRoleAsync(courseID, t.UserID); } if (role == UserRole.Student) { throw new Exception("权限不足"); } var courseInfo = await examService.GetCourseAsync(courseID); var tempFile = Path.GetTempFileName(); using (var sw = new StreamWriter(new FileStream(tempFile, FileMode.OpenOrCreate), Encoding.GetEncoding("gbk"))) { await examService.WriteCourseExamInfoAsync(sw, courseInfo); } var fileName = courseInfo.Name + " 课程测试成绩.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 }); } }