在 C# (Umbraco) 中创建可下载文件

Create a downloadable file in C# (Umbraco)

对于最近的一个项目,我们试图在 C# Umbraco 中创建一个可下载的文件,但我似乎无法让它工作。对于下载,我使用 System.Web.HttpContext.Current.Response。在 Umbraco CMS 中按下按钮后调用该函数。该函数被调用,但不响应下载。该函数在继承自 System.Web.Http.ApiController.

的 class 中实现

我知道这个问题与其他一些问题相匹配,但我尝试了不同的解决方案,我觉得我忽略了什么。

源代码:

[Route("feedback")]
[HttpPost]
public void Add(FeedbackRequest feedback)
{
    var Response = HttpContext.Current.Response;

    string filePath = "C:\testfile.txt";
    var file = new FileInfo(filePath);

    if (file.Exists)
    {
        Response.Clear();
        Response.ClearHeaders();
        Response.ClearContent();
        Response.AddHeader("Content-Disposition", "attachment; filename=" + file.Name);
        Response.AddHeader("Content-Length", file.Length.ToString());

        //Doesn't work with plain/text either
        Response.ContentType = "application/force-download";
        Response.Flush();
        Response.TransmitFile(file.FullName);
        try
        {
            Response.End();
        }
        catch (ThreadAbortException err)
        {

        }
        catch (Exception err)
        {
        }
    }

}

您将您的方法设置为 void,它应该返回一个结果

public ActionResult Add(FeedbackRequest feedback)
{   
    string filepath = "some filepath";
    byte[] filedata = File.ReadAllBytes(filepath);
    string contentType = MimeMapping.GetMimeMapping(filepath);

    var contentInfo = new System.Net.Mime.ContentDisposition
    {
        FileName = "download filename",
        Inline = false,//ask browser for download prompt
    };

    Response.AppendHeader("Content-Disposition", contentInfo.ToString());

    return File(filedata, contentType);
}

问题出在我的 js 上。我有:

            $http.get('/someurl/Export').             
             success(function (data) { 
                //console.log(data); 
                $scope.importOutput = data; 
        });

修复是:

window.open('/someurl/Export', '_blank'); 

谢谢大家的回答。我以为 js 没问题,因为它正在处理调用,但它似乎不是。