Crystal Reports图像未在ASP.NET MVC中加载

时间:2010-05-27 22:26:38

标签: asp.net asp.net-mvc crystal-reports

我在MVC应用程序内部的Webform中使用Crystal Reports。但是,在ASP.NET Development Server和IIS 7(在Win7x64上)上未显示报告中的图像。

我从其他类似的问题中了解到,CrystalImageHandler HTTP处理程序负责渲染图像,但我尝试了所有常用的解决方案都无济于事。

到目前为止,我有

  1. 在我的appSettings(通过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. 将以下httpHandler添加到system.web/httpHandlers(通过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. 在我的Global.asax.cs中添加了以下内容(通过Crystal Reports Images and ASP.Net MVCroutes.IgnoreRoute("{resource}.aspx/{*pathInfo}");

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

    关于为什么图像仍然是404的任何想法?

4 个答案:

答案 0 :(得分:8)

我有类似的问题。这帮助了我。

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

答案 1 :(得分:1)

我已经尝试了多种可以使用的方法。没有。所以我最终决定作弊:

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);

    }
}

我添加了一个路径到这个控制器匹配Crystal期望(./CrystalImageHandler.aspx)并使用该控制器在执行操作时调用处理程序。不漂亮,但功能齐全。

答案 2 :(得分:0)

您是否尝试将其添加到system.webServer/handlers?这应该在IIS7上修复它,但奇怪的是它不能在开发服务器上运行。

答案 3 :(得分:0)

在RouteConfig.cs文件中添加

routes.IgnoreRoute( “报告/ {资源}的.aspx / {*} PATHINFO”);

请注意 “Reports”是包含报表查看器的aspx文件的文件夹名称 根据您的应用程序更改此文件夹名称