DiagramConverter ASP.NET Core Integration Guide
DiagramConverter ASP.NET Core Integration Guide
This guide shows how to integrate DiagramConverter into an ASP.NET Core application to expose Visio diagram conversion as an HTTP endpoint.
Prerequisites
- Aspose.Diagram for .NET (version 26.4.0 or later)
- ASP.NET Core 6.0 or later
- License applied at application startup (see Step 1)
Step 1: Apply License at Startup
Apply your Aspose license once in Program.cs or Startup.cs before any conversions occur:
using Aspose.Diagram;
var builder = WebApplication.CreateBuilder(args);
// ... configure services
var app = builder.Build();
// Apply metered license before first request
var metered = new Metered();
metered.SetMeteredKey("publicKey", "privateKey");
app.Run();Step 2: Create a Conversion Endpoint (Stream-Based)
Use stream-based conversion to avoid writing temporary files to disk:
using System.IO;
using Aspose.Diagram.LowCode;
using Microsoft.AspNetCore.Mvc;
[ApiController]
[Route("api/diagram")]
public class DiagramConverterController : ControllerBase
{
[HttpPost("convert")]
public IActionResult Convert(IFormFile visioFile, [FromQuery] string outputFormat = "vdx")
{
if (visioFile == null || visioFile.Length == 0)
return BadRequest("No file uploaded.");
var allowedFormats = new[] { "vsdx", "vdx", "vsd", "vssx", "vstx" };
if (!Array.Exists(allowedFormats, f => f == outputFormat.ToLower()))
return BadRequest($"Unsupported output format: {outputFormat}");
using var outputStream = new MemoryStream();
var loadOptions = new LowCodeLoadOptions();
loadOptions.InputStream = visioFile.OpenReadStream();
var saveOptions = new LowCodeSaveOptions();
saveOptions.OutputStream = outputStream;
saveOptions.OutputFile = $"output.{outputFormat}";
DiagramConverter.Process(loadOptions, saveOptions);
string contentType = "application/octet-stream";
string fileName = Path.ChangeExtension(visioFile.FileName, outputFormat);
return File(outputStream.ToArray(), contentType, fileName);
}
}Step 3: Handle Errors Gracefully
Add error handling to return appropriate HTTP status codes:
using System;
using System.IO;
using Aspose.Diagram.LowCode;
using Microsoft.AspNetCore.Mvc;
[HttpPost("convert")]
public IActionResult Convert(IFormFile visioFile, [FromQuery] string outputFormat = "vdx")
{
if (visioFile == null || visioFile.Length == 0)
return BadRequest("No file uploaded.");
try
{
using var outputStream = new MemoryStream();
var loadOptions = new LowCodeLoadOptions();
loadOptions.InputStream = visioFile.OpenReadStream();
var saveOptions = new LowCodeSaveOptions();
saveOptions.OutputStream = outputStream;
saveOptions.OutputFile = $"output.{outputFormat}";
DiagramConverter.Process(loadOptions, saveOptions);
string fileName = Path.ChangeExtension(visioFile.FileName, outputFormat);
return File(outputStream.ToArray(), "application/octet-stream", fileName);
}
catch (Exception ex)
{
return StatusCode(500, $"Conversion failed: {ex.Message}");
}
}Troubleshooting
| Problem | Likely Cause | Fix |
|---|---|---|
| Evaluation watermark in output | License not applied at startup | Apply metered.SetMeteredKey() in Program.cs before app.Run() |
| Empty output stream | Stream position not reset | Call outputStream.Position = 0 before reading if needed |
ArgumentException on output format | Unsupported extension passed | Validate outputFormat against allowed list before calling Process() |
| Upload file size limit exceeded | ASP.NET Core default 30MB limit | Configure MaxRequestBodySize in Program.cs for large files |