Building a Web Server App using ASP .Net Core using a SQLite Database and a Web Service starts here using this example.
I gave it a little twist in order to get it to use SQLite and add a Web Service to it.
This means you need to follow page 1 of 8 from this Tutorial.
But make the necessary change mentioned below.
Requirements are that you have Dotnet Core installed.
And have the DB using EF Tools installed from NuGet
Creating the .Net Razor App
1. Create a new blank RAZOR project
Create a new folder in your PC and run the command to create a new RAZOR project
Command : dotnet New Razor
This will create a new blank Razor project
2. Install the DB using EF Tools
Go to Nuget and look for this package
I used the version 2.1.0-rc1-final
Run this command :
dotnet add package Microsoft.EntityFrameworkCore.Tools –version 2.1.0-rc1-final
3. Add more packages needed
dotnet add package Microsoft.EntityFrameworkCore.Tools.DotNet –version 2.1.0-preview1-final
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Design –Version 2.0.0
dotnet add package Microsoft.VisualStudio.Web.CodeGeneration.Utils –Version 2.0.0
3. Add missing other packages
correct the project .Json package references
4. Add the missing code like to generate the DB
Or generate the code based on an existing DB using Scaffolding
Example : Create a Models folder. In the Models folder, create a class file named Student.cs
5. Create the xxxxContext DB context
In the Data folder create SchoolContext.cs
In Startup.cs add the missing references (Using xxx)
add the DB Context refence : services.AddEntityFrameworkSqlite().AddDbContext<SchoolContext>(); // Added
In the Data folder, create a new class file named DbInitializer.cs
6. Generate the View pages based on the model
dotnet aspnet-codegenerator razorpage -m Course -dc SchoolContext -udl -outDir Pages\Courses –referenceScriptLibraries
dotnet aspnet-codegenerator razorpage -m Instructor -dc SchoolContext -udl -outDir Pages\Instructors –referenceScriptLibraries
7. Correct the ERRORS
When running the command in step 6 you will get ERRORS.
Globally change _context.Student to _context.Students (add an “s” to Student)
There are 7 occurrences found and updated. This is a bug and the hope to fix this bug in the next release.
=> TEST THE APP
8. BEFORE publishing add the following string in the program.cs and republish again.
9. Publish for RPI3 – ARM
Run this command :
dotnet publish -r win8-arm
10. Copy from Publish to your RPI3
Copy the Files from the PUBLISH folder to your RPI3.
ASPRazor -> C:\CoreIoT\ASPRazor\bin\Debug\netcoreapp2.0\win8-arm\ASPRazor.dll
ASPRazor -> C:\CoreIoT\ASPRazor\bin\Debug\netcoreapp2.0\win8-arm\publish\
Next MAKE SURE your FOLDER STRUCTURE on the RPI3, is exactly the same as it was on your PC before Publishing.
Next COPY the SQLite Database to your RPI3. Because this is NOT included when publishing using DotNet Core to win8Arm
11. Test the .Net Razor App on your RPI3
Connect to PowerShell Remote to your RPI3 and start the app.
Let access the database ?
Let’s add some data ?
Haleluja, this is fully functional and cross platform !!
Since you now have an SQLite DB running your can feed it with your RPI3 SENSOR data and read it out using the Web J
Adding a Web Service to the .Net Razor App
Next I will add it to the site to see we can access the data using a web service API.
Again instead of using the full blown Visual Studio we will only use the command line options.
Because we don’t want to install an elephant weight of software !
Actually Visual Studio uses all these commands in the background too …
Run this command :
dotnet aspnet-codegenerator controller -api -name StudentAPIController -m Student -dc SchoolContext -udl -outDir Models\API –referenceScriptLibraries -f
see the result
You also have the option to generate XML instead of JSON
Check the result !!
This is how you you select ID 5
ID = 5
It contains GET / POST / PUT / DELETE methods !
Accessing the Web Service using PowerShell
$URL = "http://localhost:5000/api/StudentAPI"
$APIService = Invoke-RestMethod -Uri $URL
$APIService | select ID, lastName, firstMidName