Running a .NET Core 2.0 WebApi app on the Raspberry Pi (Raspbian)

Running a .NET Core 2.0 WebApi app on the Raspberry Pi
(Raspbian)

I wanted to create a web api app that answered calls on my Raspberry Pi. The
first step I learned was how to install and configure .NET core 2.0 on the
Raspberry Pi.

Note – .NET Core only runs on the Raspberry Pi 2 or 3. It will not run on the
Raspberry Pi Zero or Zero W.

To get this working, I followed these great instructions from Jeremy Lindsay:

[Running a .NET Core 2 app on Raspbian Jessie, and deploying to the Pi with
Cake](https://jeremylindsayni.wordpress.com/2017/07/23/running-a-net-
core-2-app-on-raspbian-jessie-and-deploying-to-the-pi-with-cake/)

Once I had this template installed, I simply created a new .NET Core web api
app:

Note – Make sure you install the .NET core 2.0 SDK before attempting any of
this. .NET Downloads

dotnet new webapi -n WebApiApp

I added the following line of code to the Program.cs file. This will ensure
that the Pi answers to all host names (so I can access it from other computers
other than localhost).

WebHost.CreateDefaultBuilder(args)  
    .UseStartup()
    .UseUrls("<http://*:5000>") // add this line
    .Build();

I then copied the following files and folders from the directory created in
the sample from the article above to my new WebApiApp folder:

  • build.cake
  • tools
  • publish

I opened up build.cake and changed the correct app name to the name of the
project. Here are my configuration settings:

///////////////////////////////////////////////////////////////////////  
// ARGUMENTS (WITH DEFAULT PARAMETERS FOR LINUX (Ubuntu 16.04, Raspbian Jessie, etc)
///////////////////////////////////////////////////////////////////////
var runtime = Argument("runtime", "linux-arm");  
var destinationIp = Argument("destinationPi", "192.168.1.113");  
var destinationDirectory = Argument("destinationDirectory", @"/home/pi/DotNetConsoleApps/WebApiApp");  
var username = Argument("username", "pi");  
var sessionname = Argument("sessionname", "Raspberry Pi");  
var executableName = Argument("executableName", "WebApiApp");

I ensured that the /home/pi/DotNetConsoleApps/WebApiApp directory existed on
the Raspberry Pi and then ran the build script from the Powershell terminal:

../build

This used cake to clean, build, and deploy my web api app onto my Raspberry
Pi.

Once this was complete, I switched to my PuTTY terminal and typed in
./WebApiApp to start the Web Api app. It started listening on port 5000. I was
able to access the Web Api from a browser on my PC by using the IP address of
the Raspberry Pi:

http://192.168.1.113:5000/api/values

This displayed the default project api controller output of the template app
created in the earlier step.

I can’t believe how easy this was. .NET core is really improving the
development workflow immensely over previous versions of .NET. This was so
much better than what came before.

Update: I was able to get an LED wired up to the WebApi by using this great
article from Carlos Mendible:

Note – When you use the Gpio library, you will need to start your WbApiApp
using sudo ./WebApiApp due to the need to access IO pins

[Toggle Raspberry Pi GPIO Pins with ASP.NET Core
2.0](https://carlos.mendible.com/2017/09/01/toggle-raspberry-pi-gpio-pins-
with-asp-net-core-20/)

I wired the LED to physical pin 11 on the Pi. Here’s my controller (not much
different from his sample):

using System.Collections.Generic;  
using Microsoft.AspNetCore.Mvc;  
using Unosquare.RaspberryIO;  
using Unosquare.RaspberryIO.Gpio;

namespace WebApi.Controllers  
{
    [Route("api/[controller]")]
    public class GpioController : Controller
    {
        // GET api/values
        [HttpGet]
        public IEnumerable Get()
        {
            return new string[] { "value1", "value2" };
        }

        // GET api/values/5
        [HttpGet("{value}")]
        public string Get(bool value)
        {
            var pin = Pi.Gpio.Pin00;
            pin.PinMode = GpioPinDriveMode.Output;
            pin.Write(value);
            return $"pin {pin.BcmPinNumber} set to {value}";
        }
    }
}

Running a .NET Core 2.0 WebApi app on the Raspberry Pi
(Raspbian) The
state of the LED after sending a true to the gpio api method.

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top