Add New Service
The documentation applies to: v0.8.0
Step1: Create new service project¶
First, you need to create new .NET Core 3.1 project, choose whatever your project name. Then you need to copy this configuration below to appsettings.json
file. You need to know your service name in unique, for example: CorporateAPI
.
``` json tab="appsettings.json" { "ServiceOptions": { // Type your service name, ensure it is unique name "Name": "{Your_service_name}", // Your version, should match with configuration version folder "Version": "v1.0", // Your service management url "ServiceManagementEndpoint": "http://localhost:56456" }, "ConfigurationServiceOptions": { // Your service management url "Endpoint": "http://localhost:56456/api/configurations", "RetryCount": 5, "DelayRetry": 1000 } }
# Step 2: Import LETPortal.Core
Open nuget reference in new project, type `LetPortal.Core` to add latest version. [Nuget Link](https://www.nuget.org/packages/LetPortal.Core/)
# Step 3: Change Program.cs
You need to replace a `CreateHostBuilder` method in Program.cs by following codes:
``` c# tab="Program.cs"
public static IHostBuilder CreateHostBuilder(string[] args)
{
return Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((hostingContext, config) =>
{
// Combine ConfigurationServiceOptions and ServiceOptions
// to pull configuartion file
config.AddConfigurationService();
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
}
Step 4: Change Startup.cs¶
You need to add one line under ConfigurateServices
method
``` csharp tab="Startup.cs" services .AddLetPortal(Configuration, options => { // Enable DI DatabaseOptions in configuartion file options.EnableDatabaseConnection = true; // Enable microservices, allow to read configuration options.EnableMicroservices = true; // Enable service monitor options.EnableServiceMonitor = true; // Enable Serilog, must be true when turning on Centralized Log options.EnableSerilog = true; }) // If you want to validate OAuth2 JWT of LETPortal, add this line below .AddJwtValidator()
More optional step, **if you want to use this service stays behind LET portal Gateway**, please add this code in `Configure` method before `app.UseRouting()`
``` c# tab="Configure"
app.UseLetPortal(appLifetime, options =>
{
// If you don't create a service for LET Portal, turn it to false
options.EnableCheckUserSession = true;
// Both options below must be true when stayed behind LET Portal GW
// Also, EnableSerilog must be true
options.EnableCheckTraceId = true;
options.EnableWrapException = true;
});
Step 5: Add configuration file in ServiceManagementApis¶
Move to LetPortal.ServiceManagementApis
project folder, open Files
folder and then create your new service folder, for example: CorporateAPI
. Then you need to create sub folder of this with your service version, for example: v1.0
. Make sure you have this path Files\CorporateAPI\v1.0
.
Then you create appsettings.json
under your version folder. Copy these options into this.
``` json tab="appsettings.json"
{
// Use this option if you want to use LET Portal DatabaseOptions class
// Otherwise, you can create your own
"DatabaseOptions": {
"ConnectionString": "{Your connection string}",
"DataSource": "{Your_datasource}",
"ConnectionType": "{Your_DB_Type}"
},
"MonitorOptions": {
// Turn it to true if you want to monitor Hardware and HTTP requests
"Enable": false,
"NotifyOptions": {
// Allow to send HeartBeat to ServiceManagement
"Enable": true
}
},
"LoggerOptions": {
"NotifyOptions": {
// Allow to send log back to Service Management with some StatusCodes
"Enable": true,
// Define HTTP Status Codes which need to send log
"StatusCodes": [ 500 ]
}
}
}
Then you want to declare for DI as .NET Core DI setup
``` c#
builder.Services.Configure<ServiceOptions>(builder.Configuration.GetSection("ServiceOptions"));
Now you can add any options if you want into this file. And then you can inject IOptionsMonitor<YourOptions>
anywhere in your service project.
public class ServiceControllers
{
private readonly IOptionsMonitor<ServiceOptions> _options;
public ServiceControllers(IOptionsMonitor<ServiceOptions> options)
{
_options = options;
}
}
Step 6: Optional - Use CORS¶
By default, LET Portall will add CorsPortalOptions
which stays in Files\Shared
folder. It helps to handle CORS. If you have a plan to use CORS without reserve proxy or Gateway, you can use these codes below.
``` json tab="CORS" { "CorsPortalOptions": { "AllowedHosts": [ "http://localhost:4200" ], "AllowedHeaders": [], "AllowedMethods": [], // X-Token-Expired is mandatory, DON'T remove it "ExposedHeaders": [ "X-Token-Expired" ], // Allow to add AllowAnyHost, false to use AllowedHosts "AllowAnyHost": true, // Allow to add AllowAnyHeader, false to use AllowedHeaders "AllowAnyHeader": true, // Allow to add AllowAnyMethod, false to use AllowedMethods "AllowAnyMethod": true, // If it is true, we will bypass all CORS // Turn false if you want to use these configs above "AllowAny": true } }
Then you just add `AddPortalCors()` under your `AddLetPortal()` in Startup.cs
``` c#
services.AddLetPortal(Configuration, options =>
{
options.EnableDatabaseConnection = false;
options.EnableMicroservices = true;
options.EnableSerilog = true;
options.EnableServiceMonitor = true;
})
.AddPortalCors()
So in Configure
method, just add this code before app.UseRouting()
app.UsePortalCors();
Step 7: Optional - Multiple Environments¶
We follow a Configuration standard of .NET Core, so that you just want to add appsettings.{Your_Env}.json
in Files\{YourService}
folder. But you make sure you have to add appsettings.{Your_Env}.json
in your service project to change Service Management url as well.
Test¶
Run your service project, and then open LET Portal, login with admin
account, go to Service Monitor page to check your service here