New to Telerik Reporting? Download free 30-day trial

Integrate Telerik Reporting in ASP.NET Core 3.1 MVC Projects


Product Version
Product Progress® Telerik® Reporting
.Net Framework .NET Core 3.1


How can I integrate a Telerik Report in a .NET Core MVC 3.1 project?


The demonstrated approach to solve this issue is based on the Host Reports Service In ASP.NET Core 3+ article. You can also apply the same approach to .NET Core MVC 3.1 project.

  1. Add the following Telerik.Reporting.Services.AspNetCore and Microsoft.AspNetCore.Mvc.NewtonsoftJson packages.
  2. Add a folder with the reports.
  3. Add the ReportsController:

    namespace WebApplication1.Controllers
        using Microsoft.AspNetCore.Mvc;
        using System.Net;
        using System.Net.Mail;
        using Telerik.Reporting.Services;
        using Telerik.Reporting.Services.AspNetCore;
        public class ReportsController : ReportsControllerBase
            public ReportsController(IReportServiceConfiguration reportServiceConfiguration)
                : base(reportServiceConfiguration)
            protected override HttpStatusCode SendMailMessage(MailMessage mailMessage)
                throw new System.NotImplementedException("This method should be implemented in order to send mail messages");
                //using (var smtpClient = new SmtpClient("", 25))
                //    smtpClient.DeliveryMethod = SmtpDeliveryMethod.Network;
                //    smtpClient.EnableSsl = false;
                //    smtpClient.Send(mailMessage);
                //return HttpStatusCode.OK;
  4. Add a new class named ConfigurationHelper:

    using Microsoft.AspNetCore.Hosting;
    using Microsoft.Extensions.Configuration;
    namespace WebApplication1
        static class ConfigurationHelper
            public static IConfiguration ResolveConfiguration(IWebHostEnvironment environment)
                var reportingConfigFileName = System.IO.Path.Combine(environment.ContentRootPath, "appsettings.json");
                return new ConfigurationBuilder()
                    .AddJsonFile(reportingConfigFileName, true)
  5. Add the required configurations in the Startup.cs from the Set Up the Startup.cs File for the Reports Service article:

    public class Startup
        public Startup(IConfiguration configuration)
            Configuration = configuration;
        public IConfiguration Configuration { get; }
        // This method gets called by the runtime. Use this method to add services to the container.
        public void ConfigureServices(IServiceCollection services)
            services.Configure<IISServerOptions>(options =>
                options.AllowSynchronousIO = true;
            // Configure dependencies for ReportsController.
            services.TryAddSingleton<IReportServiceConfiguration>(sp =>
                new ReportServiceConfiguration
                    ReportingEngineConfiguration = ConfigurationHelper.ResolveConfiguration(sp.GetService<IWebHostEnvironment>()),
                    HostAppId = "ReportingCore3App",
                    Storage = new FileStorage(),
                    ReportResolver = new ReportFileResolver(
                        System.IO.Path.Combine(sp.GetService<IWebHostEnvironment>().ContentRootPath, "Reports"))
        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
            if (env.IsDevelopment())
            app.UseEndpoints(endpoints =>
                    name: "default",
                    pattern: "{controller=Home}/{action=Index}/{id?}");
  6. The view has to look as demonstrated in the following example:

    <!DOCTYPE html>
    <html xmlns="">
            <script src=""></script>
            <link href="" rel="stylesheet" id="common-css" />
            <link href="" rel="stylesheet" id="skin-css" />
                body {
                    margin: 5px;
                    font-family: Verdana, Arial, sans-serif;
                #reportViewer1 {
                    position: absolute;
                    left: 5px;
                    right: 5px;
                    top: 160px;
                    bottom: 5px;
                    overflow: hidden;
                    clear: both;
            <title>Telerik HTML5 Report Viewer Demo</title>
            <meta http-equiv="X-UA-Compatible" content="IE=edge" />
            <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1" />
            <div id="reportViewer1">
    @section scripts
        <script src="/api/reports/resources/js/telerikReportViewer"></script>
        <script type="text/javascript">
            $(document).ready(function () {
                        serviceUrl: "api/reports/",
                        reportSource: {
                            report: "Product Sales.trdp",
                            // Parameters name value dictionary
                            //parameters: {}
                        viewMode: telerikReportViewer.ViewModes.INTERACTIVE,
                        scaleMode: telerikReportViewer.ScaleModes.SPECIFIC,
                        scale: 1.0,
                        enableAccessibility: false,
                        sendEmail: { enabled: true }
  7. If you are using an SQL DataSource with a Shared connection string, add a connection string in the appsettings.json file:

    "ConnectionStrings": [
            "name": "Telerik.Reporting.Examples.CSharp.Properties.Settings.TelerikConnectionString",
            "connectionString": "Data Source=.\\SQLEXPRESS;Initial Catalog=AdventureWorks;Integrated Security=true",
            "providerName": "System.Data.SqlClient"

See Also

In this article