当前位置: 动力学知识库 > 问答 > 编程问答 >

asp.net mvc - Exception in mvc.net controller

问题描述:

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.

分享给朋友:
您可能感兴趣的文章:
随机阅读: