REST API Telerik Reporting не принимает запросы из разных источников - PullRequest
0 голосов
/ 07 июня 2018

Мой API имеет ReportsController, настроенный так:

using System.Web.Http.Cors;
using Telerik.Reporting.Cache.File;
using Telerik.Reporting.Services;
using Telerik.Reporting.Services.WebApi;

namespace API.Controllers
{
    [EnableCors(origins: "*", headers: "*", methods: "*")]
    public class ReportsController : ReportsControllerBase
    {
        static ReportServiceConfiguration configurationInstance;

        static ReportsController()
        {
            configurationInstance = new ReportServiceConfiguration
            {
                HostAppId = "Html5App",
                Storage = new FileStorage(),
                ReportResolver = new ReportTypeResolver(),
                // ReportSharingTimeout = 0,
                // ClientSessionTimeout = 15,
            };
        }

        public ReportsController()
        {
            //Initialize the service configuration
            this.ReportServiceConfiguration = configurationInstance;
        }
    }
}

Мой App_Start\WebApiConfig.cs:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        // Web API configuration and services

        config.EnableCors();
        // Web API routes
        config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }
}

Мой Global.asax.cs:

public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        ReportsControllerConfiguration.RegisterRoutes(GlobalConfiguration.Configuration);
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
}

My web.config имеет рекомендуемые перенаправления привязки:

<dependentAssembly>
    <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.6.0" newVersion="5.2.6.0" />
  </dependentAssembly>
  <dependentAssembly>
    <assemblyIdentity name="System.Net.Http.Formatting" publicKeyToken="31bf3856ad364e35" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-5.2.6.0" newVersion="5.2.6.0" />
  </dependentAssembly>

Насколько я могу судить, все настроено правильно, я могу позвонить api/reports/formats и посмотреть правильные данные.Когда я пытаюсь загрузить этот отчет, я получаю сообщение об ошибке.

$("#reportViewer1").telerik_ReportViewer({
    serviceUrl: "http://dev-api/api/reports",
    reportSource: {
        report: "Logic.Reports.Report1, Logic",
        parameters: reportParam
    },
});

Отображается: «Ошибка загрузки шаблонов средства просмотра отчетов. (Template = http://dev -api / api / reports / resources/ шаблоны / telerikReportViewerTemplate-HTML * 1023 «*).

на странице и отображает

Failed to load http://dev-api/api/reports/resources/templates/telerikReportViewerTemplate-html: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:64634' is therefore not allowed access.

в консоли Chrome.Я не могу понять, чего мне не хватает.

1 Ответ

0 голосов
/ 10 июля 2018

Вам необходимо разрешить CORS в своем веб-API. См. Этот документ: Включить CORS

  • Управление пакетом NuGet путем установки Microsoft ASP.NET CORs

  • Добавить следующие строки кода в web.Config под System.WebSe

  • Добавить следующие строки кода в ваш web.config в разделе system.WebServer

.

<httpProtocol>
  <customHeaders>
    <add name="Access-Control-Allow-Origin" value="*" />
    <add name="Access-Control-Allow-Headers" value="Content-Type" />
    <add name="Access-Control-Allow-Methods" value="GET, POST, PUT, DELETE, OPTIONS" />
    <add name="Access-Control-Allow-Credentials" value="true" />
  </customHeaders>
</httpProtocol>

Добавить [EnableCors (источник: "", заголовки: "", методы: "*")] в вашем контроллере

...