相关疑难解决方法(0)

从ASP.NET Web API中的控制器返回二进制文件

我正在使用ASP.NET MVC的新的WebAPI的网络服务,将成为了二进制文件,主要是.cab.exe文件.

以下控制器方法似乎有效,这意味着它返回一个文件,但它将内容类型设置为application/json:

public HttpResponseMessage<Stream> Post(string version, string environment, string filetype)
{
    var path = @"C:\Temp\test.exe";
    var stream = new FileStream(path, FileMode.Open);
    return new HttpResponseMessage<Stream>(stream, new MediaTypeHeaderValue("application/octet-stream"));
}
Run Code Online (Sandbox Code Playgroud)

有一个更好的方法吗?

asp.net asp.net-mvc asp.net-web-api

313
推荐指数
7
解决办法
26万
查看次数

用ASP.NET MVC下载后如何删除文件?

我想在下载后立即删除文件,我该怎么办?我试图子类化FilePathResult并覆盖WriteFile我删除文件后的方法

HttpResponseBase.TransmitFile
Run Code Online (Sandbox Code Playgroud)

被调用,但这会挂起应用程序.

用户下载后可以安全删除文件吗?

c# asp.net-mvc

31
推荐指数
7
解决办法
3万
查看次数

如何在ASP.NET MVC 4和jquery中使用web api下载文件

我是使用ASP.NET MVC 4和Web Api的新手.

我想允许用户下载一个文件,这个文件我将在服务器端创建.为了创建文件,我设法获得以下代码

[ActionName("Export")]
public HttpResponseMessage PostExportData(SomeModel model)
{           
    string csv = _service.GetData(model);
    HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
    result.Content = new StringContent(csv);
    //a text file is actually an octet-stream (pdf, etc)
    result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream");
    //we used attachment to force download
    result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
    result.Content.Headers.ContentDisposition.FileName = "file.csv";
    return result;            
}
Run Code Online (Sandbox Code Playgroud)

如何使用JQUERY来调用这个WEB API方法?

但是我不知道如何使用jquery调用这个web api并让它返回一个文件,下载任何文件时通常会得到"另存为/打开"选项.

有人可以帮助我并指导我如何拨打电话并下载文件.谢谢.

jquery asp.net-mvc-4 asp.net-web-api

14
推荐指数
1
解决办法
2万
查看次数

C# MemoryStream - 此流不支持超时

我正在尝试动态创建 csv 文件并将流输出到浏览器。

这是我的 api 端点:

    [System.Web.Http.HttpGet]
    [System.Web.Http.Route("export-to-csv")]
    public FileStreamResult ExportDeposits([FromUri(Name = "")]DepositSearchParamsVM depositSearchParamsVM)
        {
            if (depositSearchParamsVM == null)
            {
                depositSearchParamsVM = new DepositSearchParamsVM();
            }
            var records = _DepositsService.SearchDeposits(depositSearchParamsVM);
            var result = _DepositsService.WriteCsvToMemory(records);
            var memoryStream = new MemoryStream(result);

            return new FileStreamResult(memoryStream, "text/csv") { FileDownloadName = "export.csv" };
    }
Run Code Online (Sandbox Code Playgroud)

这是我的服务方法:

public byte[] WriteCsvToMemory(IEnumerable<DepositSummaryVM> records)
        {
            using (var stream = new MemoryStream())
            using (var reader = new StreamReader(stream))
            using (var writer = new StreamWriter(stream))
            using (var csv = new CsvWriter(writer))
            {
                csv.WriteRecords(records); …
Run Code Online (Sandbox Code Playgroud)

c# csv memorystream csvhelper

8
推荐指数
1
解决办法
5万
查看次数

MVC 5 WebAPI - 下载文件 - HttpException

我创建了一个基于MVC 5的WebAPI控制器 - 为我们的客户提供不同的文件.访问文件的工具也是自编写的 - 基于.NET HttpClient - 但这是另一个故事.

在下载控制器的第一个版本,我使用的生成机制来提供像文件这样

但是这个机制在我的iis上崩溃了4GB以上的文件.

所以我终于来到了这段代码:

    public class DownloadController : ApiController
    {
        public async Task Get(long id)
        {
            string fullFilePath = GetFilePathById(id);
            string returnFileName = fullFilePath.Split('\\').Last();
            FileInfo path = new FileInfo(fullFilePath);
            HttpContext.Current.Response.ContentType = "application/zip";
            HttpContext.Current.Response.AddHeader("Content-Length", path.Length.ToString());
            HttpContext.Current.Response.AddHeader("Content-Disposition", "attachment; filename=" + returnFileName);
            HttpContext.Current.Response.Flush();
        try
        {
            byte[] buffer = new byte[4096];
            using (FileStream fs = path.OpenRead())
            {
                using (BufferedStream bs = new BufferedStream(fs, 524288))
                {
                    int count = 0;
                    while ((count = bs.Read(buffer, 0, buffer.Length)) …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-web-api

6
推荐指数
1
解决办法
658
查看次数

从.Net Core api返回html文件

我试图用这个这个得到一个HTML文件作为输出,但得到error 500

我的应用程序的目标是基于api请求,服务器将生成请求的输出作为html文件,并将其发送到用户请求.

使用的代码是:

using Microsoft.AspNetCore.Mvc;  // for Controller, [Route], [HttpPost], [FromBody], JsonResult and Json
using System.IO;   // for MemoryStream
using System.Net.Http; // for HttpResponseMessage
using System.Net;  // for HttpStatusCode
using System.Net.Http.Headers;  // for MediaTypeHeaderValue

namespace server{
    [Route("api/[controller]")]
    public class FileController : Controller{
    [HttpGet]
    public HttpResponseMessage Get()
    {
        string r = @" 
            Hello There
        ";
        var stream = new MemoryStream();
        StreamWriter writer = new StreamWriter(stream);
        writer.Write(r);
        writer.Flush();
        stream.Position = 0;

       // processing the stream.
       byte[] …
Run Code Online (Sandbox Code Playgroud)

.net .net-core asp.net-core-webapi

5
推荐指数
2
解决办法
8218
查看次数

返回文件结果时出现 HTTP ERROR 500

我现在遇到了一个非常奇怪的问题......我正在尝试从我的 web api 返回一个文件,但即使流正在工作并且代码中没有抛出任何错误,我也收到了 HTTP 错误 500。

var doc = DocX.Load(...);
// ...

var ms = new MemoryStream();
doc.SaveAs(ms);
doc.Dispose();

return File(ms, "application/octet-stream");
Run Code Online (Sandbox Code Playgroud)

流的大小变为 22kb,但是当我导航到 api 的 url 时,我得到一个 HTTP 500,为什么?

谢谢你。

c# asp.net-web-api asp.net-core

4
推荐指数
1
解决办法
2315
查看次数