How to Set up a Simple Barcode Reading Server in ASP.NET Core

ASP.NET Core is a cross-platform, high-performance, open-source framework for building modern, cloud-enabled, Internet-connected apps. It is convenient to use it to build web APIs and web apps. In this article, we are going to talk about how to set up a simple barcode reading server in ASP.NET Core with Dynamsoft Barcode Reader.

New Project

Create a new ASP.NET Core Empty project named BarcodeReader using dotnet:

dotnet new web -n BarcodeReader

The template uses the minimal API design since .NET 6.

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();

app.MapGet("/", () => "Hello World!");


Add Dependencies

Install Dynamsoft Barcode Reader from nuget.

dotnet add package Dynamsoft.DotNet.Barcode --version 9.6.20

Add a Barcode Reading Endpoint

Next, let’s make add a barcode reading endpoint for reading barcodes from images.

Request example:

  "base64":"<base64-encoded image>"

Response example:

  "results": [
  1. Set the license of Dynamsoft Barcode Reader when the app starts. You can apply for a license here.

    void initLicense() {
        string errorMsg;
        EnumErrorCode errorCode = BarcodeReader.InitLicense("DLS2eyJoYW5kc2hha2VDb2RlIjoiMjAwMDAxLTE2NDk4Mjk3OTI2MzUiLCJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSIsInNlc3Npb25QYXNzd29yZCI6IndTcGR6Vm05WDJrcEQ5YUoifQ==", out errorMsg); //one-day trial license
        if (errorCode != EnumErrorCode.DBR_SUCCESS)
            // Add your code for license error processing;
  2. Add an endpoint to handle post requests for reading barcode images.

    app.MapPost("/readBarcodes", (Image image) => {
        BarcodeReader reader = new BarcodeReader();
        long startTime = getUnixTimestamp();
        TextResult[] results = reader.DecodeBase64String(image.base64,"");
        long elapsedTime = getUnixTimestamp() - startTime;
        List<BarcodeResult> barcodeResults = wrappedResults(results);
        DecodingResponse response = new DecodingResponse(
        return response;
    long getUnixTimestamp(){
        DateTimeOffset dto = new DateTimeOffset(DateTime.Now);
        return dto.ToUnixTimeMilliseconds();
    List<BarcodeResult> wrappedResults(TextResult[] results) {
        List<BarcodeResult> barcodeResults = new List<BarcodeResult>();
        foreach (var result in results)
          BarcodeResult barcodeResult = new BarcodeResult(
            barcodeText: result.BarcodeText,
            barcodeFormat: result.BarcodeFormatString,
            x1: result.LocalizationResult.ResultPoints[0].X,
            x2: result.LocalizationResult.ResultPoints[1].X,
            x3: result.LocalizationResult.ResultPoints[2].X,
            x4: result.LocalizationResult.ResultPoints[3].X,
            y1: result.LocalizationResult.ResultPoints[0].Y,
            y2: result.LocalizationResult.ResultPoints[1].Y,
            y3: result.LocalizationResult.ResultPoints[2].Y,
            y4: result.LocalizationResult.ResultPoints[3].Y
        return barcodeResults;
  3. Three records are used for this endpoint.

    record Image(string base64);
    record DecodingResponse(
      List<BarcodeResult> results,
      long elapsedTime
    record BarcodeResult(
      string barcodeText,
      string barcodeFormat,
      int x1,
      int x2,
      int x3,
      int x4,
      int y1,
      int y2,
      int y3,
      int y4

Have a Test

We can then write a web page to test the API using AJAX:

let xhr = new XMLHttpRequest();
let pay_load = {};
let dataURL = img.src;
let base64 = dataURL.substring(dataURL.indexOf(",")+1,dataURL.length);
pay_load["base64"] = base64;'POST', url);
xhr.setRequestHeader('content-type', 'application/json'); 

xhr.onreadystatechange = function(){
  if(xhr.readyState === 4){
    if (xhr.status === 200) {

To serve the web page as static files, we need to add the following code and put the file under wwwroot:


We are not going to cover the page in detail. You can check out the source code in the GitHub repo.


Enable Swagger Documentation

We can use Swagger to document the APIs.

  1. Install Swagger.

    dotnet add package Swashbuckle.AspNetCore --version 6.1.4   
  2. Add the following code to use it:

    using Microsoft.OpenApi.Models;
    builder.Services.AddSwaggerGen(c =>
           c.SwaggerDoc("v1", new OpenApiInfo { Title = "Barcode Reading API", Description = "Read barcodes from images", Version = "v1" });
    app.UseSwaggerUI(c =>
         c.SwaggerEndpoint("/swagger/v1/swagger.json", "Barcode Reading API V1");

Then we can visit the Swagger’s documentation page.


Source Code

The source code of the project is available here:


Build a web API with minimal API, ASP.NET Core, and .NET