开发者

Crystal Reports Images not loading in ASP.NET MVC

开发者 https://www.devze.com 2023-01-01 12:59 出处:网络
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'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/bdotnet@groups.msn.com/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?


I had similar problem. This helped me.

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


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.


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.


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

0

精彩评论

暂无评论...
验证码 换一张
取 消