如何知道方法何时在控制器中完成

时间:2015-02-16 15:35:33

标签: c# asp.net asp.net-mvc-4 controller

我有这个方法的问题,我想返回一个PDF文件,当它的方法结束时,我想从目录中删除de file。

public ActionResult DescargaPdfCompara(string id)
    {
        var rutaPdf = string.Empty;
        var type = "application/pdf";

        try
        {

            DateTime ahora = DateTime.Now;
            var numeroAleatorio = new Random();
            int numeroRandomico = numeroAleatorio.Next(100000000, 1000000000);
            string Ruta = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Reportes\" + Convert.ToString(ahora.Year + ahora.Month + ahora.Day + ahora.Hour + ahora.Minute + ahora.Second + numeroRandomico) + ".pdf");

            var result = SimuModel.ObtenerSabanaReporteComparativo(id);
            var resumen = SimuModel.ObtenerPreExcel(result);
            SimuModel.GenerarPdfCompa(result, resumen, Ruta);

            rutaPdf = Ruta;

            return File(rutaPdf, type);

        }
        catch (Exception e)
        {

            throw e;
        }
        finally
        {
            System.IO.File.Delete(rutaPdf);
        }
    }

在最后我删除了文件但是我收到了一个错误,因为该方法无法找到该文件,由于某种原因该方法在返回之前删除该文件。

PD:对不起我的英语,我来自智利。

谢谢你的回答!

2 个答案:

答案 0 :(得分:1)

您可以使用System.IO.File.ReadAllBytes将所有文件内容读取到内存中,然后删除该文件并使用Controller.File方法的另一个重载返回内容:

    public ActionResult GetFile()
    {
        var fileName = Path.GetTempFileName();
        System.IO.File.WriteAllText(fileName, "Hola, Chile!");
        var bytes = System.IO.File.ReadAllBytes(fileName);
        System.IO.File.Delete(fileName);
        return File(bytes, "text/plain", "file.txt");
    }

答案 1 :(得分:0)

更改返回类型ContentResult

最后删除部分。

public ContentResult DescargaPdfCompara(string id)
{
    var rutaPdf = string.Empty;
    var type = "application/pdf";

    try
    {

        DateTime ahora = DateTime.Now;
        var numeroAleatorio = new Random();
        int numeroRandomico = numeroAleatorio.Next(100000000, 1000000000);
        string Ruta = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Reportes\" + Convert.ToString(ahora.Year + ahora.Month + ahora.Day + ahora.Hour + ahora.Minute + ahora.Second + numeroRandomico) + ".pdf");

        var result = SimuModel.ObtenerSabanaReporteComparativo(id);
        var resumen = SimuModel.ObtenerPreExcel(result);
        SimuModel.GenerarPdfCompa(result, resumen, Ruta);

        rutaPdf = Ruta;

        return Content(rutaPdf, type);

    }
    catch (Exception e)
    {

        throw e;
    }

}