【问题标题】:Exception in mvc.net controllermvc.net 控制器中的异常
【发布时间】:2010-08-13 08:01:00
【问题描述】:

在 mvc .net c# 中,我的基本控制器中的 OnException 操作已过载

在控制器操作中,我使用 Ionic.Zip.dll 生成了 zip 文件

这个代码是这样的

foreach (var file in filesToarchive)
{
    zip.AddFile(@file.FilePath);
}

zip.Save(Response.OutputStream);
var rept = reports.First();
return File(Response.OutputStream, "plain/zip", "abc.zip");

在下载文件时,它会在基本控制器的 OnException 操作中引发异常

例外是:

System.Web.HttpResponseStream.Read(字节[] 缓冲区,Int32 偏移量,Int32 计数)
在 System.Web.Mvc.FileStreamResult.WriteFile(HttpResponseBase 响应)在 System.Web.Mvc.FileResult.ExecuteResult(ControllerContext 上下文)在 System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext 控制器上下文,动作结果 动作结果)在 System.Web.Mvc.ControllerActionInvoker.c__DisplayClass14.b__11() 在 System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter 过滤器,ResultExecutingContext preContext,Func1 continuation) at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass14.<>c__DisplayClass16.<InvokeActionResultWithFilters>b__13() at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList1 过滤器, ActionResult actionResult) 在 System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)

如果有人有任何解决方案,请给我。

谢谢

【问题讨论】:

    标签: asp.net-mvc


    【解决方案1】:

    尝试使用内存流而不是写入响应:

    using (var stream = new MemoryStream())
    {
        zip.Save(stream);
        return File(stream.ToArray(), "plain/zip", "abc.zip");
    }
    

    我还删除了var rept = reports.First(); 行,因为我看不到与您发布的代码 sn-p 有任何相关性。

    【讨论】:

    • 谢谢达林,它满足了我的要求并且运行良好但我只想知道我提到的异常原因你能说清楚吗?谢谢
    • 我不熟悉Ionic.Zip.dll 库,但我想当您调用zip.Save(Response.OutputStream) 时,它会刷新并关闭流,然后当您将文件结果从该流中返回时原样返回关闭它无法读取。采用流的File 扩展方法尝试读取此流并将其写入响应流。
    • Drain 你是对的,但是在抛出异常后它正在打开包含 zip 文件的下载窗口,我可以打开这些文件所以我对此仍然有些困惑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 2013-06-07
    • 2014-03-18
    • 1970-01-01
    相关资源
    最近更新 更多