信息管理系统:SpringCloud 前端Vue
此处XtraReport为Asp.net Core项目
DevExpress V20.2.6
Visual Studio 2019企业版
.NET Core 3.1.416
CentOS 7 X64
修改Startup.cs
using System;
using System.IO;
using DevExpress.AspNetCore;
using DevExpress.AspNetCore.Reporting;
using DevExpress.DataAccess.Excel;
using DevExpress.DataAccess.Sql;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using DevExpress.XtraReports.Web.Extensions;
using ReportServer.Services;
using Microsoft.Net.Http.Headers;
namespace ReportServer {
public class Startup {
public Startup(IConfiguration configuration, IWebHostEnvironment hostingEnvironment) {
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.AddDevExpressControls();
services.AddSession();
services.AddScoped<ReportStorageWebExtension, CustomReportStorageWebExtension>();
services
.AddMvc()
.AddNewtonsoftJson()
.SetCompatibilityVersion(Microsoft.AspNetCore.Mvc.CompatibilityVersion.Version_3_0);
services.ConfigureReportingServices(configurator => {
configurator.ConfigureReportDesigner(designerConfigurator => {
designerConfigurator.RegisterDataSourceWizardConfigFileConnectionStringsProvider();
designerConfigurator.RegisterDataSourceWizardJsonConnectionStorage<CustomDataSourceWizardJsonDataConnectionStorage>(true);
designerConfigurator.RegisterObjectDataSourceWizardTypeProvider<ObjectDataSourceWizardCustomTypeProvider>();
});
configurator.ConfigureWebDocumentViewer(viewerConfigurator => {
viewerConfigurator.UseCachedReportSourceBuilder();
viewerConfigurator.RegisterJsonDataConnectionProviderFactory<CustomJsonDataConnectionProviderFactory>();
});
});
//services.AddCors(options =>
//{
// options.AddPolicy("AllowCorsPolicy", builder =>
// {
// builder.WithHeaders(HeaderNames.ContentType, "no-referrer-when-downgrade");
// //Allow all ports on local host.
// // builder.SetIsOriginAllowed(origin => new Uri(origin).Host == "localhost");
// builder.SetIsOriginAllowed(origin => new Uri(origin).Host == "0.0.0.0");
// //builder.WithOrigins("http://localhost",
// //"http://192.168.1.216",
// //"http://192.168.1.119");
// builder.WithHeaders("Content-Type");
// });
//});
services.AddCors(options =>
{
options.AddPolicy("AllowCorsPolicy", builder =>
{
builder.WithHeaders(HeaderNames.ContentType, "no-referrer-when-downgrade");
builder.AllowAnyOrigin();
services.AddControllers();
builder.WithHeaders("Content-Type");
//builder.WithHeaders("Access-Control-Allow-Origin");
});
});
//services.AddCors(option => option.AddPolicy("AllowCorsPolicy", policy => policy.AllowAnyHeader().AllowAnyMethod().AllowCredentials().AllowAnyOrigin()));
//services.AddCors(option => option.AddPolicy("AllowCorsPolicy", policy => policy.AllowAnyHeader().AllowAnyMethod().AllowAnyOrigin()));
services.AddRazorPages();
services.AddMvcCore();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory) {
var reportingLogger = loggerFactory.CreateLogger("DXReporting");
DevExpress.XtraReports.Web.ClientControls.LoggerService.Initialize((exception, message) => {
var logMessage = $"[{DateTime.Now}]: Exception occurred. Message: '{message}'. Exception Details:\r\n{exception}";
reportingLogger.LogError(logMessage);
});
DevExpress.XtraReports.Configuration.Settings.Default.UserDesignerOptions.DataBindingMode = DevExpress.XtraReports.UI.DataBindingMode.Expressions;
app.UseSession();
app.UseDevExpressControls();
System.Net.ServicePointManager.SecurityProtocol |= System.Net.SecurityProtocolType.Tls12;
if (env.IsDevelopment()) {
app.UseDeveloperExceptionPage();
} else {
app.UseExceptionHandler("/Home/Error");
// The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
app.UseHsts();
}
// app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
// ...
app.UseCors("AllowCorsPolicy");
//app.UseMvc();//Endpoint路由不支持
// ...
app.UseAuthorization();
app.UseEndpoints(endpoints => {
endpoints.MapControllers().RequireCors("AllowCorsPolicy");
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
endpoints.MapControllerRoute(
name: "DSBind",
pattern: "{controller=MesReport}/{action=DSBind}");
endpoints.MapControllerRoute(
name: "SetData",
pattern: "{controller=MesReport}/{action=SetData}");
endpoints.MapControllerRoute(
name: "DeleteReport",
pattern: "{controller=MesReport}/{action=DeleteReport}");
endpoints.MapControllerRoute(
name: "RenameReport",
pattern: "{controller=MesReport}/{action=RenameReport}");
endpoints.MapControllerRoute(
name: "about",
pattern: "{controller=MesReport}/{action=about}");
});
}
}
}
控制器注解:
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Cors;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json.Linq;
using ReportServer.Models;
using ReportServer.Services;
namespace ReportServer.Controllers
{
//[DisableCors]
[EnableCors("AllowCorsPolicy")]
public class MesReportController : Controller
{