我试图从Web API返回Excel文件,但我得到的是JSON响应,而不是下载的文件。
using (var excel = new ExcelPackage())
{
var sheet = excel.Workbook.Worksheets.Add("Placments");
var taxonomyConnStr = GetConnectionString(DatabaseSettings.ConnectionStringNames.Taxonomy);
var plookConnStr = GetConnectionString(DatabaseSettings.ConnectionStringNames.Plook);
var content = _repo.GetPlacementDataTable(masterAgencyDivisionId, masterClientId, plookConnStr);
if (content.Rows.Count > 0)
{
Color colFromHex = System.Drawing.ColorTranslator.FromHtml("#000000");
sheet.Row(1).Style.Fill.PatternType = OfficeOpenXml.Style.ExcelFillStyle.Solid;
sheet.Row(1).Style.Fill.BackgroundColor.SetColor(colFromHex);
sheet.Row(1).Style.Font.Color.SetColor(Color.White);
sheet.Row(1).Style.Font.Bold = true;
sheet.Row(1).Style.Font.Size = 12;
sheet.Cells[1, 1].LoadFromDataTable(content, true);
sheet.Cells[sheet.Dimension.Address].AutoFitColumns();
}
else
{
sheet.Cells[1, 1].LoadFromText("There is no data for filtered results. Please adjust your selections.");
}
var stream = new MemoryStream();
excel.SaveAs(stream);
stream.Position = 0;
var result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-sream");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
{
FileName = "Report.xlsx"
};
return result;
}
这是我的AJAX调用
$(document).ready(function () {
$("#btnSubmit").click(function () {
window.location = "https://localhost:44318/custom/GetPlacementExcel/6/77";
})
})
但我得到的回应是:
{“version”:{“major”:1,“minor”:1,“build”:-1,“revision”:-1,“majorRevision”:-1,“minorRevision”:-1},“content”:{“headers”:[{“key”:“Content-Disposition”,“value”:[“attachment;filename=Report.xlsx“]},{”key“:”Content-Type“,”value“:[”application/octet-stream“]}]},”statusCode“:200,”reasonPhrase“:”OK“,”headers“:[],”requestMessage“:null,”isSuccessStatusCode“:true}
Asp.NetCore不再使用Http响应消息
,因此您需要使用适当的操作结果来返回所需的数据。
由于您已经将数据存储在流中,因此返回一个<code>FileStreamResult
public IActionResult MyAction() {
//...code removed for brevity
var stream = new MemoryStream();
excel.SaveAs(stream);
stream.Position = 0;
var fileName = "Report.xlsx";
var mimeType = "application/vnd.ms-excel";
//return the data stream as a file
return File(stream, mimeType, fileName); //<-- returns a FileStreamResult
}
我一直在绞尽脑汁,以及关于同一主题的各种SO帖子(请参阅JQuery Ajax和将多个复杂对象发布到asp.net MVC控制器、将多个对象传递到我的控制器等),但我很难从Ajax调用中将多个对象发布到我的控制器(.net Core)。我相信我已经像本教程一样设置了我的代码(http://www.dotnetcurry.com/aspnet-mvc/1253/multiple-model-obje
回到RC1,我会这样做: 在RC2中,不再有,并且没有任何东西可以让我返回500类型的IActionResult。 我现在问的方法完全不同了吗?我们是否不再尝试捕获代码?我们是否只是让框架将一个泛型500异常抛回API调用者?对于开发,如何查看确切的异常堆栈?
. NET Core gRPC-Web客户端调用ASP.NETCore gRPC-Web服务器http://localhost:5000正常工作。 与部署到具有虚拟应用程序的IIS服务器的客户端代码调用服务器相同(例如http://build.mycompany.ca/myapp)的结果 状态(StatusCode="未实现",Detail="错误的gRPC响应。HTTP状态代码:404") 我的
我是Java和Springboot的新手。尝试使用一个参数terminalId(字符串)实现一个简单的get请求。 我完全迷路了。
.NET核心和ASP.NET核心到底有什么区别?
主要内容:SqlSessionFactoryBuilder,SqlSessionFactory,SqlSessionMyBatis 有三个基本要素: 核心接口和类 MyBatis核心配置文件(mybatis-config.xml) SQL映射文件(mapper.xml) 下面首先介绍 MyBatis 的核心接口和类,如下所示。 每个 MyBatis 应用程序都以一个 SqlSessionFactory 对象的实例为核心。 首先获取 SqlSessionFactoryBuilder 对象,可以