C# ASP.NET MVC 4文件结果错误
我在控制器上有一个简单的操作,它返回一个PDF 很好C# ASP.NET MVC 4文件结果错误,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我在控制器上有一个简单的操作,它返回一个PDF 很好 public FileResult GetReport(string id) { byte[] fileBytes = _manager.GetReport(id); string fileName = id+ ".pdf"; return File(fileBytes, MediaTypeNames.Application.Octet, fileName); } 当经理无法获取报告时,我会返回null或一个空的字节
public FileResult GetReport(string id)
{
byte[] fileBytes = _manager.GetReport(id);
string fileName = id+ ".pdf";
return File(fileBytes, MediaTypeNames.Application.Octet, fileName);
}
当经理无法获取报告时,我会返回null
或一个空的字节[]
当结果设置为
FileResult
时,我如何与浏览器沟通是否存在问题?我会将方法的返回类型更改为ActionResult
public ActionResult GetReport(string id)
{
byte[] fileBytes = _manager.GetReport(id);
if (fileBytes != null && fileBytes.Any()){
string fileName = id+ ".pdf";
return File(fileBytes, MediaTypeNames.Application.Octet, fileName);
}
else {
//do whatever you want here
return RedirectToAction("GetReportError");
}
}
FileResult
类继承自ActionResult
。因此,您可以这样定义您的操作:
public ActionResult GetReport(string id)
{
byte[] fileBytes = _manager.GetReport(id);
string fileName = id + ".pdf";
if(fileBytes == null || fileBytes.Length == 0)
return View("Error");
return File(fileBytes, MediaTypeNames.Application.Octet, fileName);
}
如果您想“向浏览器传达”发生了错误,标准的“HTTP方式”是返回状态代码500,特别是如果您的请求是使用Ajax调用的,这样您就可以优雅地处理异常
我建议在没有为提供的id
找到报告时,简单地抛出一个异常
:
public FileResult GetReport(string id)
{
// could internally throw the Exception inside 'GetReport' method
byte[] fileBytes = _manager.GetReport(id);
// or...
if (fileBytes == null || !fileBytes.Any())
throw new Exception(String.Format("No report found with id {0}", id));
return File(fileBytes, MediaTypeNames.Application.Octet, fileName = id+ ".pdf");
}
显式重定向到错误页面或返回ViewResult
不是ASP.NET MVC中的最佳方法,因为这通常是HandleError
过滤器(默认情况下应用)的角色,可以轻松配置为重定向或呈现带有异常详细信息的某些视图(同时仍保持HTTP状态500)
假设无法获取报告确实被视为异常,则所有这些都是正确的。如果不是(例如,如果我们预期某个报告没有可用的文件可转储),显式返回重定向/查看结果是完全可以接受的。处理先决条件的另一个解决方法是将下载过程分为两个阶段。首先是检查服务器端方法中的先决条件,该方法作为ajax/post方法执行
然后,如果满足这些先决条件,您可以启动下载请求(例如,在onSuccess回调中,检查指示满足的返回值),其中(在服务器端)您将以上述帖子中所述的方式处理潜在异常。看来我已经太迟了。:DIt将重定向到操作。我们如何显示错误对话框?如果您想显示对话框,您需要在页面上实现某种AJAX通信。谢谢,@BahaiResearch.com!可能与