C# Response.TransmitFile在mvc 5中不起作用

C# Response.TransmitFile在mvc 5中不起作用,c#,asp.net-mvc-5,C#,Asp.net Mvc 5,我有一个mvc 5应用程序,我将信件文件保存在文件夹中的文件夹中,如(~\files\letters),我将物理路径保存在数据库中,将信件文件上载到(~\files\letters)工作正常,保存物理路径工作正常,问题是将信件文件下载到客户端机器,我试过使用Webclient和Response都不起作用,也没有给出任何错误,下面是使用Response下载信件文件的代码 [HttpPost] public void open(int id) { string p

我有一个mvc 5应用程序,我将信件文件保存在文件夹中的文件夹中,如(~\files\letters),我将物理路径保存在数据库中,将信件文件上载到(~\files\letters)工作正常,保存物理路径工作正常,问题是将信件文件下载到客户端机器,我试过使用Webclient和Response都不起作用,也没有给出任何错误,下面是使用Response下载信件文件的代码

 [HttpPost]
    public void open(int id)
    {

        string path = "";

        path = db.tblLetters.Where(t => t.ID == id).SingleOrDefault().LetterImg;
        string fileName = path.Substring(path.LastIndexOf(@"\")+1);
        string p = Server.MapPath("~/Files/LettersImgs/" + fileName);

        Response.Clear();
        Response.AddHeader("content-disposition", "attachment; filename=" + fileName);
        Response.ContentType = "application/octet-stream";
        Response.TransmitFile(p);
        Response.End();

    }

您可以使用直接从服务器的文件路径返回文件,而不是使用旧式的
Response.TransmitFile
。将返回类型从
void
更改为
ActionResult
(或
FileResult
),并使用
[HttpGet]
而不是
[HttpPost]
,然后执行
返回文件(…)
,让用户下载该文件,如以下示例所示:

[HttpGet]
public ActionResult Open(int id)
{
    string path = "";

    path = db.tblLetters.Where(t => t.ID == id).SingleOrDefault().LetterImg;
    string fileName = path.Substring(path.LastIndexOf(@"\")+1);
    string p = Server.MapPath("~/Files/LettersImgs/" + fileName);

    return File(p, "application/octet-stream", fileName);
}
相关问题:

public void open(int-id)
=>这应该是
public ActionResult open(int-id)
并使用
返回文件(p,“应用程序/八位字节流”,文件名)
返回文件(注意:必须使用
HttpGet
来启用下载)。