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

ProblemLikely CauseFix
Evaluation watermark in outputLicense not applied at startupApply metered.SetMeteredKey() in Program.cs before app.Run()
Empty output streamStream position not resetCall outputStream.Position = 0 before reading if needed
ArgumentException on output formatUnsupported extension passedValidate outputFormat against allowed list before calling Process()
Upload file size limit exceededASP.NET Core default 30MB limitConfigure MaxRequestBodySize in Program.cs for large files

See Also