ASP.NETMVC4FileResult-错误我在控制器上有一个简单的操作,它返回一个PDF。工作得很好。publicFileResultGetReport(stringid){byte[]fileBytes=_manager.GetReport(id);字符串文件名=id+".pdf";返回文件(fileBytes,MediaTypeNames.Application.Octet,文件名);当我返回null或空byte[]时经理无法获得报告。结果设置为FileResult时,如何与浏览器通信有问题?我会将您的方法的返回类型更改为ActionResult。publicActionResultGetReport(stringid){byte[]fileBytes=_manager.GetReport(id);if(fileBytes!=null&&fileBytes.Any()){stringfileName=id+".pdf";返回文件(fileBytes,MediaTypeNames。Application.Octet,fileName);}else{//在这里做任何你想做的事returnRedirectToAction("GetReportError");如果你想“与浏览器通信”出现错误,标准的“HTTP方式”是返回状态码500,特别是如果你的请求是使用Ajax调用的,那么你可以优雅地处理异常。我建议在未找到具有所提供ID的报告时抛出异常:publicFileResultGetReport(stringid){//可以在'GetReport'方法内部抛出异常//或者。..if(fileBytes==null||!fileBytes.Any())thrownewException(String.Format("Noreportfoundwithid{0}",id));返回文件(fileBytes,MediaTypeNames.Application.Octet,fileName=id+".pdf");显式重定向到错误页面或返回ViewResult并不是ASP.NETMVC中的最佳方法,因为这通常是HandleErrorfilter(默认应用)的角色,它可以轻松配置为重定向或呈现某些ViewException详细信息(同时仍然保持HTTP状态500)。假设无法获取报告确实被视为异常,这是正确的。如果不是(例如,如果我们希望某些报告没有可用的文件转储),显式返回重定向/查看结果是完全可以接受的。FileResult类继承自ActionResult。所以你可以这样定义你的动作:publicActionResultGetReport(stringid){byte[]fileBytes=_manager.GetReport(id);字符串文件名=id+".pdf";if(fileBytes==null||fileBytes.Length==0)returnView("Error");返回文件(fileBytes,MediaTypeNames.Application.Octet,文件名);处理先决条件的另一种解决方法是将下载过程分为两个阶段。首先是检查服务器端方法中的前提条件,它作为ajax/post方法执行。然后,如果满足这些先决条件,您可以开始下载请求(例如,在onSuccess回调中检查指示完成的返回值),您将在其中(在服务器端)以上述帖子中描述的方式处理潜在的异常。以上就是C#学习教程:ASP.NETMVC4FileResult——错误分享的全部内容。如果对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
