1

我们在我们的应用程序中使用 Telerik radchart 图表,我们已经使用了一段时间,最近在我们的应用程序中升级到 2013.2.717.40(这是我们过期订阅的最新版本)。

从那时起,我们在使用图表图像时收到 403 错误:

ASPX:

<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Charting" TagPrefix="telerik" %>
<%@ Register Assembly="Telerik.Web.UI" Namespace="Telerik.Web.UI" TagPrefix="telerik" %>

<telerik:RadChart ID="RadChart" IntelligentLabelsEnabled="True" runat="server" CssClass="RadChart" DefaultType="Spline" />

web.config 有:

<httpHandlers>
<add path="ChartImage.axd" type="Telerik.Web.UI.ChartHttpHandler" verb="*" validate="false" />
</httpHandlers>

<handlers>
      <remove name="ChartImage_axd" />
<add name="ChartImage_axd" path="ChartImage.axd" type="Telerik.Web.UI.ChartHttpHandler" verb="*" preCondition="integratedMode" />
</handlers>

我在 ChartImage.axd 的 url 上获得了 403 权限被拒绝

图像已正确创建并缓存在我们配置使用的适当临时文件夹中。

在 processmonitor 中,一旦正确写入该文件,就会创建 403 failed request trace log 文件(我们已启用 failed request tracking)

该文件包含:

ModuleName IsapiModule 
Notification 128 
HttpStatus 403 
HttpReason Forbidden 
HttpSubStatus 0 
ErrorCode 0 
ConfigExceptionInfo  
Notification EXECUTE_REQUEST_HANDLER 
ErrorCode The operation completed successfully. (0x0) 

我现在不知所措。

我看不到任何被拒绝权限的东西,看起来 web.config 设置为正确的图表。如果我取消查询字符串,我会收到一个错误页面,因为缺少必需的参数,因此映射似乎正在工作。

有任何想法吗?

4

1 回答 1

1

问题原来是 Telerik RadChart 在使用磁盘上的图像文件时,而不是会话存储 (UseSession=False) 对传入的临时图像目录的路径进行一些检查,并将加密的文件名传递给 ChartImage.axd以确保你没有做一些黑客行为。

我们正在使用:

/App/GeneratedImages

这导致文件被写入磁盘上的正确位置,但是,当 Telerik 组件根据图像路径检查此内容时,它们的匹配程度不够,导致 Telerik 自己抛出 403。

在 Reflector 的帮助下,我可能已经确定了这一点,也可能没有。

我们改为使用:~/GeneratedImages

这使事情顺利进行,我需要更好地理解为什么 /App/GeneratedImages 没有正确映射。但现在生产已恢复:)

于 2014-09-30T09:13:11.917 回答