Ryan Shripat
Ryan Shripat

Reputation: 5704

Crystal Reports Images not loading in ASP.NET MVC

I'm using Crystal Reports in a Webform inside of an MVC application. Images in the reports are not being displayed, however, on both the ASP.NET Development Server and IIS 7 (on Win7x64).

I know from a number of other questions similar to this that the CrystalImageHandler HTTP Handler is responsible for rendering the image, but I've tried all of the usual solutions to no avail.

So far, I have

  1. Added the following to my appSettings (via http://www.mail-archive.com/[email protected]/msg26882.html)

    <add key="CrystalImageCleaner-AutoStart" value="true" />

    <add key="CrystalImageCleaner-Sleep" value="60000" />

    <add key="CrystalImageCleaner-Age" value="120000" />

  2. Added the following httpHandler to system.web/httpHandlers (via https://stackoverflow.com/questions/2253682/crystal-report-viewer-control-isnt-loading-the-images-inside-the-report)

    <add verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=12.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/>

  3. Added the following to my Global.asax.cs (via Crystal Reports Images and ASP.Net MVC) routes.IgnoreRoute("{resource}.aspx/{*pathInfo}");

and routes.IgnoreRoute("CrystalImageHandler.aspx");

Any ideas as to why the images still 404?

Upvotes: 1

Views: 4177

Answers (4)

user5689895
user5689895

Reputation: 21

Add this in RouteConfig.cs file

routes.IgnoreRoute("Reports/{resource}.aspx/{*pathInfo}");

Note "Reports" is the folder name which contains the aspx file of report viewer change this folder name as per your application

Upvotes: 0

MorioBoncz
MorioBoncz

Reputation: 920

I had similar problem. This helped me.

routes.IgnoreRoute("{*allaspx}", new { allaspx = @".*(CrystalImageHandler).*" });

Upvotes: 9

Nick Daniels
Nick Daniels

Reputation: 922

I've tried the multitude of ways this can supposedly be made to work. None did. So I eventually settled on cheating:

public class CrystalImageHandlerController : Controller
{
    //
    // GET: /Reports/CrystalImageHandler.aspx

    public ActionResult Index()
    {
        return Content("");
    }

    protected override void OnActionExecuted(ActionExecutedContext filterContext)
    {

        var handler = new CrystalDecisions.Web.CrystalImageHandler();
        var app = (HttpApplication)filterContext.RequestContext.HttpContext.GetService(typeof(HttpApplication));
        if (app == null) return;

        handler.ProcessRequest(app.Context);

    }
}

I added a route to this controller matching what Crystal expects (./CrystalImageHandler.aspx) and used this controller to invoke the handler when the action is executed. Not pretty, but functional.

Upvotes: 1

Cymen
Cymen

Reputation: 14419

Have you tried adding it to system.webServer/handlers? That should fix it on IIS7 but it is strange it doesn't work on the development server w/o that.

Upvotes: 0

Related Questions