NullReferenceException в SiteLayout.cshtml с FileResult
Для нашего клиента у нас есть действие MVC, которое возвращает PDF-файлы. Следующий код является логикой для возврата FileResult.
public FileResult DownloadAbsFile(string id)
{
String path = GetPathNameByID(id);
if (System.IO.File.Exists(path))
{
byte[] fileBytes = System.IO.File.ReadAllBytes(path);
string fileName = System.IO.Path.GetFileName(path);
return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Pdf, fileName);
}
else
{
return null;
}
}
Когда я запрашиваю PDF-файл, используя правильный URL-адрес, большую часть времени это не проблема. Однако некоторые пользователи получают ошибку. Ошибка озадачивает меня довольно долгое время. Ошибка, которую я получаю, заключается в следующем.
Exception type: NullReferenceException
Exception message: Object reference not set to an instance of an object
at ASP._Page_Views_Shared_SiteLayout_cshtml.Execute() in
xxx\Views\Shared\SiteLayout.cshtml:line xxx
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy()
at System.Web.Mvc.WebViewPage.ExecutePageHierarchy()
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext
pageContext, TextWriter writer, WebPageRenderingBase startPage)
at System.Web.WebPages.WebPageBase.<>c__DisplayClass3.
<RenderPageCore>b__2(TextWriter writer)
at System.Web.WebPages.HelperResult.WriteTo(TextWriter writer)
at System.Web.WebPages.WebPageBase.Write(HelperResult result)
at System.Web.WebPages.WebPageBase.RenderSurrounding(String partialViewName,
Action`1 body)
at System.Web.WebPages.WebPageBase.PopContext()
at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext
pageContext, TextWriter writer, WebPageRenderingBase startPage)
at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter
writer, Object instance)
at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext,
TextWriter writer)
at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
at
System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext
controllerContext, ActionResult actionResult)
at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass21.
<BeginInvokeAction>b__1e(IAsyncResult asyncResult)
at
В определенной строке в cshtml он пытается получить доступ к PageTitle в ViewBag, который не был установлен. Это значение никогда не устанавливается, поэтому я получаю это. Но то, что я не понимаю, это то, почему он пытается визуализировать вид в первую очередь.
Кто-нибудь может мне помочь с этим?