Asp.net mvc 未找到CrystalImageHandler.aspx

Asp.net mvc 未找到CrystalImageHandler.aspx,asp.net-mvc,crystal-reports,report,Asp.net Mvc,Crystal Reports,Report,我在MVC3应用程序的普通ASP.NET aspx页面上使用Crystal reports viewer。在控制器操作中,我只是重定向到aspx页面,报告显示良好。但问题在于动态图像。我已经找到了最简单的解决方案,将图像路径作为报告参数传递,并将此参数设置为图像源。在VisualStudio预览中,这可以正常工作,但在执行时,我会在页面上看到此错误 “找不到NetworkError:404- 服务器/ReportWebForms/CrystalImageHandler.aspx?dynamici

我在MVC3应用程序的普通ASP.NET aspx页面上使用Crystal reports viewer。在控制器操作中,我只是重定向到aspx页面,报告显示良好。但问题在于动态图像。我已经找到了最简单的解决方案,将图像路径作为报告参数传递,并将此参数设置为图像源。在VisualStudio预览中,这可以正常工作,但在执行时,我会在页面上看到此错误

“找不到NetworkError:404- 服务器/ReportWebForms/CrystalImageHandler.aspx?dynamicimage=cr_tmp_image_4fbcb73a-e001-4365-84fc-164788dd1605.png”

因此,我假设,由于之前没有使用crystal reports的经验,问题出在CrystalImageHandler.aspx中。 我在Web.config中有以下条目:

  <httpHandlers><add verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304"/></httpHandlers></system.web>
  <handlers><add name="CrystalImageHandler.aspx_GET" verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" preCondition="integratedMode"/></handlers></system.webServer>

这是MVC类型的问题吗?有人能帮忙吗


谢谢

我也遇到了同样的问题,但幸运的是,我有一些使用Crystal Reports的经验

您只需要更改Web.config,因为“path”属性设置为site root。 如果您在浏览器中打开url并从中删除ReportWebForms,则此功能将起作用

实际上,我刚刚又添加了两行配置:

<system.web>
    <httpHandlers>
      <add verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" />
      <!-- Added -->
      <add verb="GET" path="Reports/CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" />
      <add verb="GET,HEAD" path="asset.axd" validate="false" type="Telerik.Web.Mvc.WebAssetHttpHandler, Telerik.Web.Mvc" />
    </httpHandlers>
</system.web>

<system.webServer>
    <handlers>
      <add name="MiniProfiler" path="mini-profiler-resources/*" verb="*" type="System.Web.Routing.UrlRoutingModule" resourceType="Unspecified" preCondition="integratedMode" />
      <add name="CrystalImageHandler.aspx_GET" verb="GET" path="CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" preCondition="integratedMode" />
      <!-- Added -->
      <add name="CrystalImageHandler.aspx_GETR" verb="GET" path="Reports/CrystalImageHandler.aspx" type="CrystalDecisions.Web.CrystalImageHandler, CrystalDecisions.Web, Version=13.0.2000.0, Culture=neutral, PublicKeyToken=692fbea5521e1304" preCondition="integratedMode" />
      <remove name="asset" />
      <add name="asset" preCondition="integratedMode" verb="GET,HEAD" path="asset.axd" type="Telerik.Web.Mvc.WebAssetHttpHandler, Telerik.Web.Mvc" />
    </handlers>
</system.webServer>

在我的例子中,我有一个名为Reports的文件夹,其中放置了.aspx文件。我想您应该将此更改为ReportWebForms

在我的情况下,我只需忽略MVC的路由。要添加到@Hovhannes解决方案中,您应该将此规则添加到Routeconfig.cs

routes.IgnoreRoute("{*allaspx}", new { allaspx = @".*(CrystalImageHandler).*" });
答复: 将其添加到RouteConfig.cs文件中

IgnoreRoute(“Reports/{resource}.aspx/{*pathInfo}”)

注意:“Reports”是包含查看aspx页面的crystal Reports的目录名


将此代码用作CrystalImageHandler.aspx:

<%@ Page Language="C#" AutoEventWireup="true" %>

<script runat="server" language="c#" >
    protected void Page_Load(object sender, EventArgs e)
    {
        CrystalDecisions.Web.CrystalImageHandler handler = new CrystalDecisions.Web.CrystalImageHandler();
        handler.ProcessRequest(this.Context);            
    }
</script>

受保护的无效页面加载(对象发送方、事件参数e)
{
CrystalDecisions.Web.CrystalImageHandler=新建CrystalDecisions.Web.CrystalImageHandler();
ProcessRequest(this.Context);
}

我放弃使用Crystal reports来解决问题。太多的问题,它是崩溃我的VS2010太频繁了。现在,我将创建html页面以在应用程序中显示页面上的报告,并将使用iTextSharp库(我觉得非常好)创建PDF以供下载。通过这种方式,我可以控制报表创建过程中的每一行,这与BlackBox Crystal报表不同。这可以帮助某人在与我处于相同位置时决定采取何种方法。正如我在问题的评论中所说,我可能会放弃Crystal reports,但我会接受这一回答,因为它可能会帮助其他人。解决这个简单问题总是很困难的!在我的例子中,仅仅添加另一个带有文件夹名的ignoreRoute就足以解决这个问题。直到今天,以前的每一次部署都使用了公认的答案。由于某些原因,没有显示任何图像,因为它将CrystalImageHangdler.aspx附加到当前url()。但添加此ignoreRoute是唯一的解决方法。在创建报告的文件夹下添加了页面(“CrystalImageHandler.aspx”),并在page_Load中添加了上述代码,它显示了图像。哇,我认为这行不通。但它做到了!谢谢
<%@ Page Language="C#" AutoEventWireup="true" %>

<script runat="server" language="c#" >
    protected void Page_Load(object sender, EventArgs e)
    {
        CrystalDecisions.Web.CrystalImageHandler handler = new CrystalDecisions.Web.CrystalImageHandler();
        handler.ProcessRequest(this.Context);            
    }
</script>