问题描述:

In mvc .net c# i have over loaded OnException action in my base controller

In controller action I have generated zip file using Ionic.Zip.dll

The code for this is like

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");

While downloading the file it throws exception in OnException action in base controller

the exception is :

System.Web.HttpResponseStream.Read(Byte[]

buffer, Int32 offset, Int32 count)

at

System.Web.Mvc.FileStreamResult.WriteFile(HttpResponseBase

response) at

System.Web.Mvc.FileResult.ExecuteResult(ControllerContext

context) at

System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext

controllerContext, ActionResult

actionResult) at

System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass14.b__11()

at

System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter

filter, 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 filters,

ActionResult actionResult) at

System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext

controllerContext, String actionName)

If anybody has any solution then please give it to me.

Thanks

网友答案:

Try using a memory stream instead of writing to the response:

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

Also I've removed the var rept = reports.First(); line as I don't see any relevance to the code snippet you've posted.

相关阅读:
Top