New to Telerik ReportingStart a free 30-day trial

Adapting NavigateToReport Action for Custom ReportSource Resolvers

Environment

ProductReporting
Version20.1.26.520 and later

Description

The article is relevant only to Custom ReportSource Resolvers extending the UriReportSourceResolver.

After upgrading to the 2026 Q2 (20.1.26.520) release, NavigateToReport actions no longer pass the report name or path in the ResolveReport(string report) method of the UriReportSourceResolver as before. Instead, the method now receives a hash-based string. This change ensures better security, but may break existing implementations of custom ReportSource resolvers overriding the ResolveReport method.

This knowledge base article also answers the following questions:

  • How to adjust a custom ReportSource resolver for the NavigateToReport action after the 2026 Q2 (20.1.26.520) changes?
  • Why does UriReportSourceResolver.ResolveReport method return null for the NavigateToReport action?
  • How to use subfolders in a custom ReportSource resolver?

Solution

To adapt your custom ReportSource resolver for the changes:

  1. Understand Changes when Resolving Report's Path in NavigateToReport Action:

    • The report argument in the ResolveReport method now represents a hash-based string.
    • The hash-to-URI mapping is managed by the Reporting REST Service's storage.
  2. Update the Custom ReportSource Resolver:

    • Use the base UriReportSourceResolver.ResolveReport(report) method to resolve the hashed string.
    • Ensure your base UriReportSourceResolver is configured with the correct reportsPath.

    Example:

    CSharp
    public class CustomUriReportSourceResolver: UriReportSourceResolver
    {
    	public CustomUriReportSourceResolver(string reportsPath): base(reportsPath)
    	{
    	}
    	protected override ReportSource ResolveReport(string report)
    	{
    		var reportResolvedPath = base.ResolveReport(report);
    		return reportResolvedPath;
    	}
    }
  3. Set the Correct reportsPath:

    • Ensure the reportsPath includes the root folder containing all report files.
    • If reports are in subfolders, the reportSource.report passed from the viewer or the action must include the subfolder name.
  4. Handle Subfolders:

    • Ensure subfolder name is part of the reportSource.report in the viewer, or UriReportSource.Uri in the NavigateToReport action.
    • For example, use SubfolderName/ReportName.trdp instead of just ReportName.trdp.
  5. Troubleshooting base.ResolveReport Returning Null:

    • If base.ResolveReport(report) returns null, the hash-to-URI mapping is not available in the Reporting REST Service Storage.
    • Ensure that the reportsPath received by the UriReportSourceResolver constructor, when concatenated with the reportSource.report passed from the viewer, or from the NavigateToReport action, matches the expected path to your reports.

See Also