相关疑难解决方法(0)

ASP.NET MVC:如何让浏览器打开并显示PDF而不是显示下载提示?

好的,所以我有一个生成PDF并将其返回给浏览器的动作方法.问题是,IE不会自动打开PDF,而是显示下载提示,即使它知道它是什么类型的文件.Chrome做同样的事情.在这两种浏览器中,如果我单击指向存储在服务器上的PDF文件的链接,它将打开正常,并且永远不会显示下载提示.

以下是调用以返回PDF的代码:

public FileResult Report(int id)
{
    var customer = customersRepository.GetCustomer(id);
    if (customer != null)
    {
        return File(RenderPDF(this.ControllerContext, "~/Views/Forms/Report.aspx", customer), "application/pdf", "Report - Customer # " + id.ToString() + ".pdf");
    }
    return null;
}
Run Code Online (Sandbox Code Playgroud)

这是服务器的响应头:

HTTP/1.1 200 OK
Server: ASP.NET Development Server/10.0.0.0
Date: Thu, 16 Sep 2010 06:14:13 GMT
X-AspNet-Version: 4.0.30319
X-AspNetMvc-Version: 2.0
Content-Disposition: attachment; filename="Report - Customer # 60.pdf"
Cache-Control: private, s-maxage=0
Content-Type: application/pdf
Content-Length: 79244
Connection: Close
Run Code Online (Sandbox Code Playgroud)

我是否必须在响应中添加一些特殊内容才能让浏览器自动打开PDF?

任何帮助是极大的赞赏!谢谢!

pdf asp.net-mvc

40
推荐指数
2
解决办法
3万
查看次数

如何在ASP.NET 5/MVC 6中创建响应消息并向其添加内容字符串

在web api 2中,我们习惯于使用字符串内容来获取响应:

var response = Request.CreateResponse(HttpStatusCode.Ok);
response.Content = new StringContent("<my json result>", Encoding.UTF8, "application/json");
Run Code Online (Sandbox Code Playgroud)

如何在不使用像ObjectResult这样的内置类的情况下在ASP.NET 5/MVC 6中实现相同的功能?

c# httpresponse asp.net-web-api

21
推荐指数
1
解决办法
3万
查看次数

无缓冲输出非常慢

我使用中概述的方法从数据库生成一个非常大的.csv文件

/sf/answers/941935361/

它工作正常,达到一定程度.当导出的文件太大时,我会得到一个OutOfMemoryException.

如果我通过修改这样的代码来关闭输出缓冲:

protected override void WriteFile(System.Web.HttpResponseBase response)
{
    response.BufferOutput = false; // <--- Added this
    this.Content(response.OutputStream);
}
Run Code Online (Sandbox Code Playgroud)

文件下载完成.但是,它比启用输出缓冲时慢几个数量级(在localhost上测量缓冲为true/false的同一文件).

我知道这样做比较慢,但为什么它会慢慢相对爬行呢?我有什么办法可以提高处理速度吗?

UPDATE

也可以选择使用注释中建议的File(Stream stream,String contentType).但是,我不确定如何创建stream.数据是基于数据库查询动态组合的,而MemoryStream将耗尽连续的物理内存.欢迎提出建议.

更新2

在评论中建议,交替从数据库中读取并写入流会导致性能下降.我修改了代码以在单独的线程中执行流写入(使用生产者/消费者模式).性能没有明显差异.

asp.net-mvc asp.net-mvc-4

11
推荐指数
1
解决办法
3828
查看次数

使用响应流的MVC控制器

我正在使用MVC 3我想动态创建一个CSV文件供下载,但我不确定正确的MVC导向方法.

在传统的ASP.net中,我会写一些类似的东西:

Response.ClearHeaders();
Response.ContentType = "text/csv";
Response.AddHeader("content-disposition", attachment;filename='Test.csv'");
Response.Write("1,2,3");
Response.End();
Run Code Online (Sandbox Code Playgroud)

我已经查看了ContentResult操作,但似乎我需要将结果创建为字符串,即

return Content(myData,"text/csv");

我想,我可以构建一个字符串,但由于这些文件可能长达数千行,这对我来说似乎效率低下.

有人能指出我正确的方向吗?谢谢.

asp.net-mvc actionresult asp.net-mvc-3

9
推荐指数
2
解决办法
3万
查看次数