After spending several days trying to get the Report Viewer working in an existing MVC5 application, I thought I would layout here the "real" steps you need to do to get this working in a project, including any caveats NOT detailed in Telerik's online resources. These suggestions are based on all the errors you will get once you've added the "Telerik MVC Report Viewer View R2 2016" item template as suggested in the online forums and documentation.
1.) Startup / Global.asax order of operations IS IMPORTANT!
This comes into play especially for large existing projects which may have a lot of altered startup code in the Global.asax. You may be tempted to place the Telerik Reporting configuration (Telerik.Reporting.Services.WebApi.ReportsControllerConfiguration.RegisterRoutes(System.Web.Http.GlobalConfiguration.Configuration)) at the end of your "Application_Startup" code. However, it needs to be placed JUST right.
In most existing apps there may already be setup code for the WebApi routes (specifically "GlobalConfiguration.Configure(YourRegisterWebApiCode)"). If the call to your "GlobalConfiguration.Configure(...)" method comes BEFORE the Telerik reporting registration, you will NEVER be able to browse your reports and will have all kinds of issues, nor will you be able to even browse to "/api/reports/formats". Although not mentioned anywhere in the documentation, this is because the default routes setup for the WebApi already have a "Default" route which will get hit before even trying to resolve the Telerik ones (essentially overriding the Telerik ones). Once you register the Telerik reporting BEFORE your calls to register your custom routes "GlobalConfiguration.Configure(...)", everything is just fine!
2.) You get exceptions about "Telerik.Reporting.OpenXmlRendering.dll".
The report may still render, however, you run across this exception:
An exception of type 'System.TypeInitializationException' occurred in Telerik.Reporting.OpenXmlRendering.dll and wasn't handled before a managed/native boundary.
Upon further inspection of the Inner Exceptions, you may see:
Could not load file or assembly 'DocumentFormat.OpenXml' or one of its dependencies.
The system cannot find the file specified.":"DocumentFormat.OpenXml, Version=2.0.5022.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
Adding a nuget reference to Microsoft's "DocumentFormat.OpenXml" will most likely fix this part, but there are more exceptions to fix yet...
3.) "InvalidCastException" occured:
After fixing the issue from #2, you may run across this exception:
An exception of type 'System.InvalidCastException' occurred in Telerik.Reporting.dll and wasn't handled before a managed/native boundary
Additional information: Specified cast is not valid.
Additional information: The type initializer for 'Telerik.Reporting.OpenXmlRendering.Wordprocessing.WordprocessingReport' threw an exception.
Additional information: The type initializer for 'Telerik.Reporting.OpenXmlRendering.Presentation.PresentationReport' threw an exception.
Additional information: The type initializer for 'Telerik.Reporting.OpenXmlRendering.Spreadsheet.SpreadsheetReport' threw an exception.
Oh so helpful! But what you may need to do (especially since the Telerik dlls are not on the current "DocumentFormat.OpenXml" version) is simply add this xml section into your web.config under the "runtime/assemblyBinding" section (of course, once you've followed #2 above):
<assemblyIdentity name="DocumentFormat.OpenXml" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="126.96.36.199-2.5.65535.65535" newVersion="2.5.5631.0" />
And viola! Now your reports should run without errors!