From 08e1f507947662ee528862ebdf912ce31578b705 Mon Sep 17 00:00:00 2001 From: vivet Date: Sun, 19 Jul 2026 09:53:38 +0200 Subject: [PATCH 1/3] Updated --- Api.Metrics/.docker/docker-compose.dcproj | 13 ++ Api.Metrics/.docker/docker-compose.yml | 17 ++ Api.Metrics/.dockerignore | 12 ++ Api.Metrics/.github/config/slack.yml | 18 ++ .../.github/workflows/build-and-deploy.yml | 182 ++++++++++++++++++ Api.Metrics/.gitignore | 11 ++ Api.Metrics/.kubernetes/autoscaler.yaml | 25 +++ Api.Metrics/.kubernetes/configmap.yaml | 8 + Api.Metrics/.kubernetes/deployment.yaml | 75 ++++++++ Api.Metrics/.kubernetes/service-monitor.yaml | 13 ++ Api.Metrics/.kubernetes/service.yaml | 12 ++ .../Properties/DoNotParallelize.cs | 3 + .../Tests.Api.Metrics.csproj | 23 +++ .../Api.Metrics.Models.csproj | 69 +++++++ Api.Metrics/Api.Metrics.sln | 134 +++++++++++++ Api.Metrics/Api.Metrics/Api.Metrics.csproj | 37 ++++ Api.Metrics/Api.Metrics/Dockerfile.Local | 8 + Api.Metrics/Api.Metrics/Program.cs | 10 + .../Properties/InternalsVisibleTo.cs | 3 + .../Api.Metrics/appsettings.Development.json | 2 + .../Api.Metrics/appsettings.Production.json | 2 + .../Api.Metrics/appsettings.Staging.json | 2 + Api.Metrics/Api.Metrics/appsettings.json | 15 ++ Api.Metrics/Dockerfile | 39 ++++ Api.Metrics/LICENSE | 18 ++ Api.Metrics/README.md | 62 ++++++ Api.Metrics/icon.png | Bin 0 -> 14103 bytes 27 files changed, 813 insertions(+) create mode 100644 Api.Metrics/.docker/docker-compose.dcproj create mode 100644 Api.Metrics/.docker/docker-compose.yml create mode 100644 Api.Metrics/.dockerignore create mode 100644 Api.Metrics/.github/config/slack.yml create mode 100644 Api.Metrics/.github/workflows/build-and-deploy.yml create mode 100644 Api.Metrics/.gitignore create mode 100644 Api.Metrics/.kubernetes/autoscaler.yaml create mode 100644 Api.Metrics/.kubernetes/configmap.yaml create mode 100644 Api.Metrics/.kubernetes/deployment.yaml create mode 100644 Api.Metrics/.kubernetes/service-monitor.yaml create mode 100644 Api.Metrics/.kubernetes/service.yaml create mode 100644 Api.Metrics/.tests/Tests.Api.Metrics/Properties/DoNotParallelize.cs create mode 100644 Api.Metrics/.tests/Tests.Api.Metrics/Tests.Api.Metrics.csproj create mode 100644 Api.Metrics/Api.Metrics.Models/Api.Metrics.Models.csproj create mode 100644 Api.Metrics/Api.Metrics.sln create mode 100644 Api.Metrics/Api.Metrics/Api.Metrics.csproj create mode 100644 Api.Metrics/Api.Metrics/Dockerfile.Local create mode 100644 Api.Metrics/Api.Metrics/Program.cs create mode 100644 Api.Metrics/Api.Metrics/Properties/InternalsVisibleTo.cs create mode 100644 Api.Metrics/Api.Metrics/appsettings.Development.json create mode 100644 Api.Metrics/Api.Metrics/appsettings.Production.json create mode 100644 Api.Metrics/Api.Metrics/appsettings.Staging.json create mode 100644 Api.Metrics/Api.Metrics/appsettings.json create mode 100644 Api.Metrics/Dockerfile create mode 100644 Api.Metrics/LICENSE create mode 100644 Api.Metrics/README.md create mode 100644 Api.Metrics/icon.png diff --git a/Api.Metrics/.docker/docker-compose.dcproj b/Api.Metrics/.docker/docker-compose.dcproj new file mode 100644 index 00000000..d9e8e500 --- /dev/null +++ b/Api.Metrics/.docker/docker-compose.dcproj @@ -0,0 +1,13 @@ + + + + 2.1 + Linux + false + http://localhost:{ServicePort}/docs + $(ProjectName) + + + + + \ No newline at end of file diff --git a/Api.Metrics/.docker/docker-compose.yml b/Api.Metrics/.docker/docker-compose.yml new file mode 100644 index 00000000..97e5feda --- /dev/null +++ b/Api.Metrics/.docker/docker-compose.yml @@ -0,0 +1,17 @@ +services: + api.metrics: + image: api.metrics + hostname: api-metrics + restart: on-failure + ports: + - 8080:8080 + build: + context: ../Api.Metrics + dockerfile: "Dockerfile.Local" + networks: + - network + +networks: + network: + name: network + driver: bridge diff --git a/Api.Metrics/.dockerignore b/Api.Metrics/.dockerignore new file mode 100644 index 00000000..e694ae21 --- /dev/null +++ b/Api.Metrics/.dockerignore @@ -0,0 +1,12 @@ +.dockerignore +.env +.git +.gitignore +.vs +.vscode +docker-compose.yml +docker-compose.*.yml +*/bin +*/obj +!obj/Docker/publish/* +!obj/Docker/empty/ diff --git a/Api.Metrics/.github/config/slack.yml b/Api.Metrics/.github/config/slack.yml new file mode 100644 index 00000000..3592affb --- /dev/null +++ b/Api.Metrics/.github/config/slack.yml @@ -0,0 +1,18 @@ +username: GitHub Actions +icon_url: https://github.githubassets.com/assets/GitHub-Mark-ea2971cee799.png + +pretext: "{{icon jobStatus}} *<{{repositoryUrl}}|{{repositoryName}}>* <{{workflowRunUrl}}|`#{{runNumber}}`> triggered via {{eventName}} by ** for branch <{{refUrl}}|`{{ref}}`>." + +text: | + {{#if payload.commits}} + *Commits* + {{#each payload.commits}} + <{{this.url}}|`{{truncate this.id 8}}`> - {{this.message}} + {{/each}} + {{/if}} + +footer: >- + <{{repositoryUrl}}|{{repositoryName}}> #{{runNumber}} + +fallback: |- + [GitHub] {{workflow}} #{{runNumber}} {{jobName}} is {{jobStatus}} diff --git a/Api.Metrics/.github/workflows/build-and-deploy.yml b/Api.Metrics/.github/workflows/build-and-deploy.yml new file mode 100644 index 00000000..9a60ac17 --- /dev/null +++ b/Api.Metrics/.github/workflows/build-and-deploy.yml @@ -0,0 +1,182 @@ +name: Build And Deploy +on: + pull_request: + branches: + - main + push: + branches: + - main + workflow_dispatch: +env: + APP_NAME: Api.Metrics + IMAGE_NAME: api.metrics + SERVICE_NAME: api-metrics + VERSION: '${{ vars.VERSION }}.${{ github.run_number }}.${{ github.run_attempt }}' + DOTNET_SDK_VERSION: "10.0" + DOTNET_ASPNET_VERSION: "10.0" + AZURE_GROUP_KUBERNETES: ${{ vars.AZURE_RESOURCE_GROUP_KUBERNETES }} + AZURE_GROUP_DELIVERY: ${{ vars.AZURE_RESOURCE_GROUP_DELIVERY }} + AZURE_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }} + AZURE_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }} + AZURE_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }} + AZURE_SUBSCRIPTION_ID: ${{ github.ref == 'refs/heads/main' && secrets.PRODUCTION_AZURE_SUBSCRIPTION_ID || secrets.STAGING_AZURE_SUBSCRIPTION_ID }} + NUGET_HOST: https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json + NUGET_USERNAME: ${{ github.actor }} + NUGET_PASSWORD: ${{ secrets.GITHUB_TOKEN }} + KUBERNETES_NODEPOOL_COMPUTE: cpu + KUBERNETES_NAMESPACE: ${{ vars.KUBERNETES_NAMESPACE }} + KUBERNETES_REPLICA_COUNT: ${{ github.ref == 'refs/heads/main' && 3 || 2 }} + KUBERNETES_REPLICA_COUNT_MAX: ${{ github.ref == 'refs/heads/main' && 8 || 5 }} + KUBERNETES_REPLICA_HISTORY_COUNT: 0 + KUBERNETES_MEMORY_REQUEST: 512Mi + KUBERNETES_MEMORY_LIMIT: 1536Mi + KUBERNETES_MEMORY_SCALING: 180 + KUBERNETES_CPU_REQUEST: 200m + KUBERNETES_CPU_LIMIT: 600m + KUBERNETES_CPU_SCALING: 180 + ASPNETCORE_ENVIRONMENT: ${{ github.ref == 'refs/heads/main' && 'Production' || 'Staging' }} +concurrency: + group: ${{ github.workflow }}-${{ github.repository }} + cancel-in-progress: true +jobs: + build-and-deploy: + runs-on: + - self-hosted + - linux + - ${{ github.ref == 'refs/heads/main' && 'Production' || 'Staging' }} + permissions: + contents: write + packages: write + steps: + - uses: actions/checkout@v6 + + - name: Azure Login + shell: pwsh + run: | + az login --service-principal -u $env:AZURE_CLIENT_ID -p $env:AZURE_CLIENT_SECRET --tenant $env:AZURE_TENANT_ID -o none; + az account set -s $env:AZURE_SUBSCRIPTION_ID -o none; + + $env:KUBERNETES_CLUSTER = az aks list -g $env:AZURE_GROUP_KUBERNETES --query [0].name -o tsv; + az aks get-credentials -g $env:AZURE_GROUP_KUBERNETES -n $env:KUBERNETES_CLUSTER --overwrite -o none; + + - name: Build Solution + shell: pwsh + run: | + dotnet nuget add source $env:NUGET_HOST -n private -u $env:NUGET_USERNAME -p $env:NUGET_PASSWORD --store-password-in-clear-text; + + dotnet build -c Release .\$env:APP_NAME.sln; + + if ($LastExitCode -ne 0) + { + throw "error"; + }; + + - name: Test Solution + shell: pwsh + run: | + dotnet test .\.tests\Tests.$env:APP_NAME\Tests.$env:APP_NAME.csproj; + + if ($LastExitCode -ne 0) + { + throw "error"; + }; + + - name: Publish NuGet + shell: pwsh + run: | + $nugetProjectModels=$env:APP_NAME + ".Models/" + $env:APP_NAME + ".Models.csproj"; + dotnet pack $nugetProjectModels -c Release --output nupkgs /p:PackageVersion=$env:VERSION --include-symbols --no-build; + dotnet nuget push nupkgs/$env:APP_NAME".Models."$env:VERSION.nupkg -s $env:NUGET_HOST -k $env:NUGET_PASSWORD; + + if ($LastExitCode -ne 0) + { + throw "error"; + }; + + - name: Build & Push Image + shell: pwsh + run: | + $env:CONTAINER_REGISTRY_HOST = az acr list -g $env:AZURE_GROUP_DELIVERY --query [0].loginServer -o tsv; + + az acr build ` + --registry $env:CONTAINER_REGISTRY_HOST ` + --agent-pool buildpool ` + -t "$($env:IMAGE_NAME):latest" ` + -t "$($env:IMAGE_NAME):$($env:VERSION)" ` + --build-arg DOTNET_SDK_VERSION=$env:DOTNET_SDK_VERSION ` + --build-arg DOTNET_ASPNET_VERSION=$env:DOTNET_ASPNET_VERSION ` + --build-arg CONTAINER_REGISTRY_SOURCE_LABEL=https://github.com/$env:GITHUB_REPOSITORY ` + --build-arg NUGET_HOST=$env:NUGET_HOST ` + --build-arg NUGET_USERNAME=$env:NUGET_USERNAME ` + --build-arg NUGET_PASSWORD=$env:NUGET_PASSWORD ` + ./ + + if ($LastExitCode -ne 0) + { + throw "error"; + }; + + echo "CONTAINER_REGISTRY_HOST=$env:CONTAINER_REGISTRY_HOST" >> $env:GITHUB_ENV; + + - name: Kubernetes Deploy + shell: pwsh + run: | + Get-Content .kubernetes/service.yaml | foreach { [Environment]::ExpandEnvironmentVariables($_) } | Set-Content .kubernetes/service.tmp.yaml; + kubectl apply -f .kubernetes/service.tmp.yaml; + if ($LastExitCode -ne 0) + { + throw "error"; + }; + + Get-Content .kubernetes/configmap.yaml | foreach { [Environment]::ExpandEnvironmentVariables($_) } | Set-Content .kubernetes/configmap.tmp.yaml; + kubectl apply -f .kubernetes/configmap.tmp.yaml; + if ($LastExitCode -ne 0) + { + throw "error"; + }; + + Get-Content .kubernetes/deployment.yaml | foreach { [Environment]::ExpandEnvironmentVariables($_) } | Set-Content .kubernetes/deployment.tmp.yaml; + kubectl apply -f .kubernetes/deployment.tmp.yaml; + if ($LastExitCode -ne 0) + { + throw "error"; + }; + + Get-Content .kubernetes/autoscaler.yaml | foreach { [Environment]::ExpandEnvironmentVariables($_) } | Set-Content .kubernetes/autoscaler.tmp.yaml; + kubectl apply -f .kubernetes/autoscaler.tmp.yaml; + if ($LastExitCode -ne 0) + { + throw "error"; + }; + + Get-Content .kubernetes/service-monitor.yaml | foreach { [Environment]::ExpandEnvironmentVariables($_) } | Set-Content .kubernetes/service-monitor.tmp.yaml; + kubectl apply -f .kubernetes/service-monitor.tmp.yaml; + if ($LastExitCode -ne 0) + { + throw "error"; + }; + + - name: GitHub Release + if: github.ref == 'refs/heads/main' + uses: ncipollo/release-action@v1 + with: + tag: v${{ env.VERSION }} + name: "Release ${{ env.VERSION }}" + body: | + Version: ${{ env.VERSION }} + Commit: ${{ github.sha }} + Build run: ${{ github.run_number }} + Image: ${{ env.CONTAINER_REGISTRY_HOST }}/${{ github.repository_owner }}/${{ env.IMAGE_NAME }}:${{ env.VERSION }} + artifacts: "nupkgs/*" + token: ${{ secrets.GITHUB_TOKEN }} + draft: false + prerelease: false + + - name: Slack Notification + if: always() + uses: act10ns/slack@v2 + with: + webhook-url: ${{ secrets.SLACK_WEBHOOK }} + config: .github/config/slack.yml + status: ${{ job.status }} + channel: ${{ vars.SLACK_CHANNEL }} \ No newline at end of file diff --git a/Api.Metrics/.gitignore b/Api.Metrics/.gitignore new file mode 100644 index 00000000..9921fc06 --- /dev/null +++ b/Api.Metrics/.gitignore @@ -0,0 +1,11 @@ +.vs +*.user +*.userprefs +*.suo +_ReSharper* +**/bin +**/obj +*.DotSettings.User +packages +.env +**/Properties/launchSettings.json \ No newline at end of file diff --git a/Api.Metrics/.kubernetes/autoscaler.yaml b/Api.Metrics/.kubernetes/autoscaler.yaml new file mode 100644 index 00000000..95add8ad --- /dev/null +++ b/Api.Metrics/.kubernetes/autoscaler.yaml @@ -0,0 +1,25 @@ +apiVersion: autoscaling/v2 +kind: HorizontalPodAutoscaler +metadata: + name: %SERVICE_NAME%-hpa + namespace: %KUBERNETES_NAMESPACE% +spec: + minReplicas: %KUBERNETES_REPLICA_COUNT% + maxReplicas: %KUBERNETES_REPLICA_COUNT_MAX% + scaleTargetRef: + apiVersion: apps/v1 + kind: Deployment + name: %SERVICE_NAME% + metrics: + - type: Resource + resource: + name: cpu + target: + type: Utilization + averageUtilization: %KUBERNETES_CPU_SCALING% + - type: Resource + resource: + name: memory + target: + type: Utilization + averageUtilization: %KUBERNETES_MEMORY_SCALING% diff --git a/Api.Metrics/.kubernetes/configmap.yaml b/Api.Metrics/.kubernetes/configmap.yaml new file mode 100644 index 00000000..d13013d1 --- /dev/null +++ b/Api.Metrics/.kubernetes/configmap.yaml @@ -0,0 +1,8 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: %SERVICE_NAME%-config + namespace: %KUBERNETES_NAMESPACE% +data: + App__Version: %VERSION% + ASPNETCORE_ENVIRONMENT: %ASPNETCORE_ENVIRONMENT% diff --git a/Api.Metrics/.kubernetes/deployment.yaml b/Api.Metrics/.kubernetes/deployment.yaml new file mode 100644 index 00000000..9871912e --- /dev/null +++ b/Api.Metrics/.kubernetes/deployment.yaml @@ -0,0 +1,75 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: %SERVICE_NAME% + namespace: %KUBERNETES_NAMESPACE% + labels: + app: %SERVICE_NAME% +spec: + replicas: %KUBERNETES_REPLICA_COUNT% + revisionHistoryLimit: %KUBERNETES_REPLICA_HISTORY_COUNT% + selector: + matchLabels: + app: %SERVICE_NAME% + template: + metadata: + labels: + app: %SERVICE_NAME% + spec: + automountServiceAccountToken: false + securityContext: + runAsUser: 1000 + runAsGroup: 2000 + fsGroup: 2000 + topologySpreadConstraints: + - maxSkew: 1 + topologyKey: kubernetes.io/hostname + whenUnsatisfiable: ScheduleAnyway + labelSelector: + matchLabels: + app: %SERVICE_NAME% + nodeSelector: + nodepool.compute: %KUBERNETES_NODEPOOL_COMPUTE% + kubernetes.io/os: linux + containers: + - name: %SERVICE_NAME% + image: %CONTAINER_REGISTRY_HOST%/%IMAGE_NAME%:%VERSION% + ports: + - containerPort: 8080 + imagePullPolicy: Always + envFrom: + - configMapRef: + name: %SERVICE_NAME%-config + resources: + requests: + memory: %KUBERNETES_MEMORY_REQUEST% + cpu: %KUBERNETES_CPU_REQUEST% + limits: + memory: %KUBERNETES_MEMORY_LIMIT% + cpu: %KUBERNETES_CPU_LIMIT% + securityContext: + privileged: false + allowPrivilegeEscalation: false + readOnlyRootFilesystem: true + runAsNonRoot: true + runAsUser: 1000 + runAsGroup: 2000 + capabilities: + drop: + - ALL + livenessProbe: + httpGet: + path: /healthz + port: 8080 + scheme: HTTP + periodSeconds: 10 + initialDelaySeconds: 30 + timeoutSeconds: 2 + readinessProbe: + httpGet: + path: /healthz + port: 8080 + scheme: HTTP + periodSeconds: 5 + initialDelaySeconds: 20 + timeoutSeconds: 2 diff --git a/Api.Metrics/.kubernetes/service-monitor.yaml b/Api.Metrics/.kubernetes/service-monitor.yaml new file mode 100644 index 00000000..c64eb7fa --- /dev/null +++ b/Api.Metrics/.kubernetes/service-monitor.yaml @@ -0,0 +1,13 @@ +apiVersion: azmonitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: %SERVICE_NAME%-monitor + namespace: %KUBERNETES_NAMESPACE% +spec: + selector: + matchLabels: + app.kubernetes.io/name: %SERVICE_NAME% + endpoints: + - port: http + path: /metrics + interval: 1m \ No newline at end of file diff --git a/Api.Metrics/.kubernetes/service.yaml b/Api.Metrics/.kubernetes/service.yaml new file mode 100644 index 00000000..2d8e20b2 --- /dev/null +++ b/Api.Metrics/.kubernetes/service.yaml @@ -0,0 +1,12 @@ +apiVersion: v1 +kind: Service +metadata: + name: %SERVICE_NAME% + namespace: %KUBERNETES_NAMESPACE% +spec: + ports: + - name: http + port: 8080 + selector: + app: %SERVICE_NAME% + type: ClusterIP diff --git a/Api.Metrics/.tests/Tests.Api.Metrics/Properties/DoNotParallelize.cs b/Api.Metrics/.tests/Tests.Api.Metrics/Properties/DoNotParallelize.cs new file mode 100644 index 00000000..6a076669 --- /dev/null +++ b/Api.Metrics/.tests/Tests.Api.Metrics/Properties/DoNotParallelize.cs @@ -0,0 +1,3 @@ +using Microsoft.VisualStudio.TestTools.UnitTesting; + +[assembly: DoNotParallelize] \ No newline at end of file diff --git a/Api.Metrics/.tests/Tests.Api.Metrics/Tests.Api.Metrics.csproj b/Api.Metrics/.tests/Tests.Api.Metrics/Tests.Api.Metrics.csproj new file mode 100644 index 00000000..d0e3bb57 --- /dev/null +++ b/Api.Metrics/.tests/Tests.Api.Metrics/Tests.Api.Metrics.csproj @@ -0,0 +1,23 @@ + + + + net10.0 + false + latest + + + true + + + + + + + + + + + + + + diff --git a/Api.Metrics/Api.Metrics.Models/Api.Metrics.Models.csproj b/Api.Metrics/Api.Metrics.Models/Api.Metrics.Models.csproj new file mode 100644 index 00000000..e4188943 --- /dev/null +++ b/Api.Metrics/Api.Metrics.Models/Api.Metrics.Models.csproj @@ -0,0 +1,69 @@ + + + + net10.0 + + 10.0.0.0 + 10.0.0.0 + 10.0.0.0 + AnyCPU + Debug;Release + latest + en-US + enable + LICENSE + true + + True + true + true + true + Michael Vivet + Michael Vivet + $(ProjectName) + Example project demonstrating a focused aspect of the Nano Library. + A practical example highlighting a specific area or scenario of Nano for learning and experimentation. Shows how features or patterns can be applied without representing a full application or complete reference. + + git + main + https://github.com/Nano-Core/Nano.Lessons.git + $(GitCommitHash) + true + true + true + snupkg + true + $(Version) + nano;example;sample;framework;library;learning;showcase + https://github.com/Nano-Core/Nano.Lessons/$(ProjectName) + LICENSE + icon.png + README.md + true + + + + True + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Api.Metrics/Api.Metrics.sln b/Api.Metrics/Api.Metrics.sln new file mode 100644 index 00000000..76938f76 --- /dev/null +++ b/Api.Metrics/Api.Metrics.sln @@ -0,0 +1,134 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 18 +VisualStudioVersion = 18.1.11312.151 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".solution", ".solution", "{F9091FFF-8BDF-4447-A4CC-19ACF2F783A3}" + ProjectSection(SolutionItems) = preProject + .dockerignore = .dockerignore + .gitignore = .gitignore + Dockerfile = Dockerfile + icon.png = icon.png + LICENSE = LICENSE + README.md = README.md + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".docker", ".docker", "{06253892-53F5-4EB1-8CBE-8558DBDD9B70}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".tests", ".tests", "{7E0D2A84-F3DE-4406-BE71-30EE6723E6D0}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".kubernetes", ".kubernetes", "{0C4D782F-72EF-42B4-BC1B-AF4044CC863A}" + ProjectSection(SolutionItems) = preProject + .kubernetes\autoscaler.yaml = .kubernetes\autoscaler.yaml + .kubernetes\configmap.yaml = .kubernetes\configmap.yaml + .kubernetes\deployment.yaml = .kubernetes\deployment.yaml + .kubernetes\service.yaml = .kubernetes\service.yaml + .kubernetes\service-monitor.yaml = .kubernetes\service-monitor.yaml + EndProjectSection +EndProject +Project("{E53339B2-1760-4266-BCC7-CA923CBCF16C}") = "docker-compose", ".docker\docker-compose.dcproj", "{557A0C48-DA6A-4D7C-8668-94F08A390F4B}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".nano", ".nano", "{3339F5B7-AA56-4192-B201-75B2620036B1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Nano.App", "..\..\Nano.Library\Nano.App\Nano.App.csproj", "{50CBB29E-F271-4BD3-B176-6F68BB3294EE}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{426FE279-89DF-4C2A-ABBB-729FDA4D893A}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "config", "config", "{5C605BF3-D5A3-4334-8AFA-4D45A6DC365E}" + ProjectSection(SolutionItems) = preProject + .github\config\slack.yml = .github\config\slack.yml + EndProjectSection +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{F547FB13-43D4-4AAB-8629-B41FFF4A251F}" + ProjectSection(SolutionItems) = preProject + .github\workflows\build-and-deploy.yml = .github\workflows\build-and-deploy.yml + EndProjectSection +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nano.Common", "..\..\Nano.Library\Nano.Common\Nano.Common.csproj", "{F1E2F880-3214-E0ED-03BF-4F78931C9C6E}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nano.Data.Abstractions", "..\..\Nano.Library\Nano.Data.Abstractions\Nano.Data.Abstractions.csproj", "{023BB767-08ED-44DE-A6BF-9A2EDE8345B7}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nano.Eventing.Abstractions", "..\..\Nano.Library\Nano.Eventing.Abstractions\Nano.Eventing.Abstractions.csproj", "{7F25283D-B5C5-8CA9-8722-E84B380905C6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nano.Storage.Abstractions", "..\..\Nano.Library\Nano.Storage.Abstractions\Nano.Storage.Abstractions.csproj", "{F0FA24A3-0F7B-3962-C471-78992174D4B6}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nano.App.Api", "..\..\Nano.Library\Nano.App.Api\Nano.App.Api.csproj", "{E55DCB7C-9082-3538-6288-5A6E5C8DE183}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Api.Metrics.Models", "Api.Metrics.Models\Api.Metrics.Models.csproj", "{55CA3ADE-88B1-B763-9FAB-EE5D4F418EB8}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Api.Metrics", "Api.Metrics\Api.Metrics.csproj", "{77596F3E-C6F4-A01F-B4D9-9370C3ED3CBC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Tests.Api.Metrics", ".tests\Tests.Api.Metrics\Tests.Api.Metrics.csproj", "{B008D867-12B4-7EB7-D707-1C1503E4151A}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Nano.Logging.Abstractions", "..\..\Nano.Library\Nano.Logging.Abstractions\Nano.Logging.Abstractions.csproj", "{6BE9DA86-B487-64ED-7BF6-08CA10A05A97}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {557A0C48-DA6A-4D7C-8668-94F08A390F4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {557A0C48-DA6A-4D7C-8668-94F08A390F4B}.Debug|Any CPU.Build.0 = Debug|Any CPU + {557A0C48-DA6A-4D7C-8668-94F08A390F4B}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50CBB29E-F271-4BD3-B176-6F68BB3294EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {50CBB29E-F271-4BD3-B176-6F68BB3294EE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {50CBB29E-F271-4BD3-B176-6F68BB3294EE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {50CBB29E-F271-4BD3-B176-6F68BB3294EE}.Release|Any CPU.Build.0 = Release|Any CPU + {F1E2F880-3214-E0ED-03BF-4F78931C9C6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F1E2F880-3214-E0ED-03BF-4F78931C9C6E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F1E2F880-3214-E0ED-03BF-4F78931C9C6E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F1E2F880-3214-E0ED-03BF-4F78931C9C6E}.Release|Any CPU.Build.0 = Release|Any CPU + {023BB767-08ED-44DE-A6BF-9A2EDE8345B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {023BB767-08ED-44DE-A6BF-9A2EDE8345B7}.Debug|Any CPU.Build.0 = Debug|Any CPU + {023BB767-08ED-44DE-A6BF-9A2EDE8345B7}.Release|Any CPU.ActiveCfg = Release|Any CPU + {023BB767-08ED-44DE-A6BF-9A2EDE8345B7}.Release|Any CPU.Build.0 = Release|Any CPU + {7F25283D-B5C5-8CA9-8722-E84B380905C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {7F25283D-B5C5-8CA9-8722-E84B380905C6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {7F25283D-B5C5-8CA9-8722-E84B380905C6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {7F25283D-B5C5-8CA9-8722-E84B380905C6}.Release|Any CPU.Build.0 = Release|Any CPU + {F0FA24A3-0F7B-3962-C471-78992174D4B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {F0FA24A3-0F7B-3962-C471-78992174D4B6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {F0FA24A3-0F7B-3962-C471-78992174D4B6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {F0FA24A3-0F7B-3962-C471-78992174D4B6}.Release|Any CPU.Build.0 = Release|Any CPU + {E55DCB7C-9082-3538-6288-5A6E5C8DE183}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {E55DCB7C-9082-3538-6288-5A6E5C8DE183}.Debug|Any CPU.Build.0 = Debug|Any CPU + {E55DCB7C-9082-3538-6288-5A6E5C8DE183}.Release|Any CPU.ActiveCfg = Release|Any CPU + {E55DCB7C-9082-3538-6288-5A6E5C8DE183}.Release|Any CPU.Build.0 = Release|Any CPU + {55CA3ADE-88B1-B763-9FAB-EE5D4F418EB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {55CA3ADE-88B1-B763-9FAB-EE5D4F418EB8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {55CA3ADE-88B1-B763-9FAB-EE5D4F418EB8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {55CA3ADE-88B1-B763-9FAB-EE5D4F418EB8}.Release|Any CPU.Build.0 = Release|Any CPU + {77596F3E-C6F4-A01F-B4D9-9370C3ED3CBC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {77596F3E-C6F4-A01F-B4D9-9370C3ED3CBC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {77596F3E-C6F4-A01F-B4D9-9370C3ED3CBC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {77596F3E-C6F4-A01F-B4D9-9370C3ED3CBC}.Release|Any CPU.Build.0 = Release|Any CPU + {B008D867-12B4-7EB7-D707-1C1503E4151A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B008D867-12B4-7EB7-D707-1C1503E4151A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B008D867-12B4-7EB7-D707-1C1503E4151A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B008D867-12B4-7EB7-D707-1C1503E4151A}.Release|Any CPU.Build.0 = Release|Any CPU + {6BE9DA86-B487-64ED-7BF6-08CA10A05A97}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6BE9DA86-B487-64ED-7BF6-08CA10A05A97}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6BE9DA86-B487-64ED-7BF6-08CA10A05A97}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6BE9DA86-B487-64ED-7BF6-08CA10A05A97}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {557A0C48-DA6A-4D7C-8668-94F08A390F4B} = {06253892-53F5-4EB1-8CBE-8558DBDD9B70} + {50CBB29E-F271-4BD3-B176-6F68BB3294EE} = {3339F5B7-AA56-4192-B201-75B2620036B1} + {5C605BF3-D5A3-4334-8AFA-4D45A6DC365E} = {426FE279-89DF-4C2A-ABBB-729FDA4D893A} + {F547FB13-43D4-4AAB-8629-B41FFF4A251F} = {426FE279-89DF-4C2A-ABBB-729FDA4D893A} + {F1E2F880-3214-E0ED-03BF-4F78931C9C6E} = {3339F5B7-AA56-4192-B201-75B2620036B1} + {023BB767-08ED-44DE-A6BF-9A2EDE8345B7} = {3339F5B7-AA56-4192-B201-75B2620036B1} + {7F25283D-B5C5-8CA9-8722-E84B380905C6} = {3339F5B7-AA56-4192-B201-75B2620036B1} + {F0FA24A3-0F7B-3962-C471-78992174D4B6} = {3339F5B7-AA56-4192-B201-75B2620036B1} + {E55DCB7C-9082-3538-6288-5A6E5C8DE183} = {3339F5B7-AA56-4192-B201-75B2620036B1} + {B008D867-12B4-7EB7-D707-1C1503E4151A} = {7E0D2A84-F3DE-4406-BE71-30EE6723E6D0} + {6BE9DA86-B487-64ED-7BF6-08CA10A05A97} = {3339F5B7-AA56-4192-B201-75B2620036B1} + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {72ED70A7-E1BB-4D06-B6FD-E092DA575FBE} + EndGlobalSection +EndGlobal diff --git a/Api.Metrics/Api.Metrics/Api.Metrics.csproj b/Api.Metrics/Api.Metrics/Api.Metrics.csproj new file mode 100644 index 00000000..1263758d --- /dev/null +++ b/Api.Metrics/Api.Metrics/Api.Metrics.csproj @@ -0,0 +1,37 @@ + + + + net10.0 + + 10.0.0.0 + 10.0.0.0 + 10.0.0.0 + AnyCPU + Debug;Release + latest + en-US + enable + LICENSE + true + + false + true + false + true + Linux + ..\docker-compose.dcproj + + + + True + + + + + + + + + + + \ No newline at end of file diff --git a/Api.Metrics/Api.Metrics/Dockerfile.Local b/Api.Metrics/Api.Metrics/Dockerfile.Local new file mode 100644 index 00000000..5abf3030 --- /dev/null +++ b/Api.Metrics/Api.Metrics/Dockerfile.Local @@ -0,0 +1,8 @@ +ARG DOTNET_ASPNET_VERSION="10.0" +FROM mcr.microsoft.com/dotnet/aspnet:$DOTNET_ASPNET_VERSION AS base + +EXPOSE 8080 + +ENV ASPNETCORE_HTTP_PORTS= + +ENTRYPOINT ["dotnet", "Api.Metrics.dll"] \ No newline at end of file diff --git a/Api.Metrics/Api.Metrics/Program.cs b/Api.Metrics/Api.Metrics/Program.cs new file mode 100644 index 00000000..32865375 --- /dev/null +++ b/Api.Metrics/Api.Metrics/Program.cs @@ -0,0 +1,10 @@ +using Nano.App.Api; + +NanoApiApplication + .ConfigureApp() + .ConfigureServices(_ => + { + // Blank + }) + .Build() + .Run(); diff --git a/Api.Metrics/Api.Metrics/Properties/InternalsVisibleTo.cs b/Api.Metrics/Api.Metrics/Properties/InternalsVisibleTo.cs new file mode 100644 index 00000000..4cb592ff --- /dev/null +++ b/Api.Metrics/Api.Metrics/Properties/InternalsVisibleTo.cs @@ -0,0 +1,3 @@ +using System.Runtime.CompilerServices; + +[assembly: InternalsVisibleTo("Tests.Api.Metrics")] \ No newline at end of file diff --git a/Api.Metrics/Api.Metrics/appsettings.Development.json b/Api.Metrics/Api.Metrics/appsettings.Development.json new file mode 100644 index 00000000..8593c62d --- /dev/null +++ b/Api.Metrics/Api.Metrics/appsettings.Development.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/Api.Metrics/Api.Metrics/appsettings.Production.json b/Api.Metrics/Api.Metrics/appsettings.Production.json new file mode 100644 index 00000000..8593c62d --- /dev/null +++ b/Api.Metrics/Api.Metrics/appsettings.Production.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/Api.Metrics/Api.Metrics/appsettings.Staging.json b/Api.Metrics/Api.Metrics/appsettings.Staging.json new file mode 100644 index 00000000..8593c62d --- /dev/null +++ b/Api.Metrics/Api.Metrics/appsettings.Staging.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file diff --git a/Api.Metrics/Api.Metrics/appsettings.json b/Api.Metrics/Api.Metrics/appsettings.json new file mode 100644 index 00000000..3e7785d9 --- /dev/null +++ b/Api.Metrics/Api.Metrics/appsettings.json @@ -0,0 +1,15 @@ +{ + "App": { + "Version": "1.0.0.0", + "Hosting": { + "Root": "api", + "Http": { + "Ports": [ + 8080 + ] + } + }, + "Metrics": { + } + } +} \ No newline at end of file diff --git a/Api.Metrics/Dockerfile b/Api.Metrics/Dockerfile new file mode 100644 index 00000000..cdd3c099 --- /dev/null +++ b/Api.Metrics/Dockerfile @@ -0,0 +1,39 @@ +ARG DOTNET_SDK_VERSION +ARG DOTNET_ASPNET_VERSION +ARG CONTAINER_REGISTRY_SOURCE_LABEL +ARG NUGET_HOST +ARG NUGET_USERNAME +ARG NUGET_PASSWORD + +FROM mcr.microsoft.com/dotnet/aspnet:$DOTNET_ASPNET_VERSION AS base + +LABEL org.opencontainers.image.source=CONTAINER_REGISTRY_SOURCE_LABEL + +EXPOSE 8080 +WORKDIR /app + +FROM mcr.microsoft.com/dotnet/sdk:$DOTNET_SDK_VERSION AS build +ARG NUGET_HOST +ARG NUGET_USERNAME +ARG NUGET_PASSWORD + +WORKDIR /src +COPY . . + +RUN dotnet nuget add source $NUGET_HOST -n private -u $NUGET_USERNAME -p $NUGET_PASSWORD --store-password-in-clear-text +RUN dotnet build -c Release -o /app + +FROM build AS publish +RUN dotnet publish -c Release -o /app + +FROM base AS final +WORKDIR /app +COPY --from=publish /app . + +RUN mkdir -p /app/wwwroot + +ENV ASPNETCORE_HTTP_PORTS= +ENV COMPlus_EnableDiagnostics=0 +ENV DOTNET_USE_POLLING_FILE_WATCHER=true + +ENTRYPOINT ["dotnet", "Api.Metrics.dll"] \ No newline at end of file diff --git a/Api.Metrics/LICENSE b/Api.Metrics/LICENSE new file mode 100644 index 00000000..006e8c21 --- /dev/null +++ b/Api.Metrics/LICENSE @@ -0,0 +1,18 @@ +The MIT License (MIT) +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file diff --git a/Api.Metrics/README.md b/Api.Metrics/README.md new file mode 100644 index 00000000..877aafa4 --- /dev/null +++ b/Api.Metrics/README.md @@ -0,0 +1,62 @@ +# Api.Metrics + +> _Nano API application with OpenTelemetry metrics configured._ +_All lessons are complete, self-contained examples that include build and deployment setup._ + +> ⚠️ _To run this solution, the **[Nano.Library](https://github.com/Nano-Core/Nano.Library)** repository must be checked out in the same root directory. +Nano is referenced directly from source (not via NuGet packages) and is expected to be located in the .nano solution folder._ + +> ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. + +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. + +*** + +## Table of Contents +* [Summary](#summary) +* [Configuration](#configuration) +* [Kubernetes](#kubernetes) +* [GitHub Actions](#github-actions) + +## Summary +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)**. + +This example demonstrates how OpenTelemetry can be configured to expose metrics through `/metrics`. Try it out. + +| Endpoint | Description | +| ------------------------------------ | ------------------------------------------------ | +| `http://localhost:8080/api/metrics` | Returns the current metrics for the application. | + +> 📖 Learn more about **[Nano OpenTelemetry Metrics](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#opentelemetry-metrics)**. + +## Configuration +Added the empty `Metrics` section to enable OpenTelemetry with Prometheus for the application. + +```json +"App": { + "Metrics": { + } +} +``` + +## Kubernetes +Added the new `service-monitor` template to the application. + +```yaml +apiVersion: azmonitoring.coreos.com/v1 +kind: ServiceMonitor +metadata: + name: %SERVICE_NAME%-monitor + namespace: %KUBERNETES_NAMESPACE% +spec: + selector: + matchLabels: + app.kubernetes.io/name: %SERVICE_NAME% + endpoints: + - port: http + path: /metrics + interval: 1m +``` + +## GitHub Actions +The deployment commands have been updated to apply the new Kubernetes `ServiceMonitor` template. diff --git a/Api.Metrics/icon.png b/Api.Metrics/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..67567667de4c5a4ca797c66e71aa87aafc6df1e5 GIT binary patch literal 14103 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 Date: Sun, 19 Jul 2026 12:24:30 +0200 Subject: [PATCH 2/3] Updated --- .github/workflows/build-and-deploy.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.github/workflows/build-and-deploy.yml b/.github/workflows/build-and-deploy.yml index 02847f09..bc9b7411 100644 --- a/.github/workflows/build-and-deploy.yml +++ b/.github/workflows/build-and-deploy.yml @@ -13,7 +13,6 @@ jobs: runs-on: ubuntu-latest permissions: contents: write - id-token: write concurrency: group: ${{ github.repository }} cancel-in-progress: false From e361ff0a7b066d5aa7ce75240df60b70ce11d8df Mon Sep 17 00:00:00 2001 From: vivet Date: Sun, 19 Jul 2026 17:51:22 +0200 Subject: [PATCH 3/3] Updated --- Api.ApiClients.Audit/README.md | 12 +++--------- Api.ApiClients.Entity/README.md | 6 +++--- Api.ApiClients.RootLogIn/README.md | 6 +++--- Api.ApiClients/README.md | 8 ++++---- Api.Auth.External.Custom/README.md | 8 ++++---- Api.Auth.RootLogin/README.md | 8 ++++---- Api.Authorization/README.md | 8 ++++---- Api.ContentNegotiation/README.md | 6 +++--- Api.Cookies/README.md | 6 +++--- Api.CustomConfigSection/README.md | 6 +++--- Api.CustomMiddleware/README.md | 6 +++--- Api.CustomService/README.md | 6 +++--- Api.Data.Audit/README.md | 8 ++++---- Api.Data.EntityEvents/README.md | 10 +++++----- Api.Data.Identity.Auth.ApiKey/README.md | 8 ++++---- .../README.md | 8 ++++---- Api.Data.Identity.Auth.Jwt/README.md | 8 ++++---- Api.Data.Identity/README.md | 8 ++++---- Api.Data.InMemory/README.md | 16 ++++++++-------- Api.Data.LazyLoading/README.md | 6 +++--- Api.Data.MySql.Collation/README.md | 6 +++--- Api.Data.MySql.Mappings/README.md | 6 +++--- Api.Data.MySql.Spatial/README.md | 6 +++--- Api.Data.MySql.StoredProcedures/README.md | 6 +++--- Api.Data.MySql.Views/README.md | 6 +++--- Api.Data.MySql/README.md | 18 +++++++++--------- Api.Data.PostgreSQL.Spatial/README.md | 6 +++--- Api.Data.PostgreSQL/README.md | 18 +++++++++--------- Api.Data.Repository.AutoSave/README.md | 6 +++--- Api.Data.Repository.Includes/README.md | 8 ++++---- Api.Data.SoftDelete/README.md | 6 +++--- Api.Data.SqLite/README.md | 18 +++++++++--------- Api.Data.SqlServer.Spatial/README.md | 6 +++--- Api.Data.SqlServer/README.md | 18 +++++++++--------- Api.Data.Triggers/README.md | 6 +++--- Api.Documentation.Csp/README.md | 6 +++--- Api.Documentation/README.md | 6 +++--- Api.ErrorHandling/README.md | 6 +++--- Api.Eventing.RabbitMq/README.md | 10 +++++----- Api.HealthChecks/README.md | 6 +++--- Api.Hosting.Http/README.md | 6 +++--- Api.Hosting.Https/README.md | 6 +++--- Api.Hosting.MultipartLimits/README.md | 6 +++--- Api.Localization/README.md | 6 +++--- Api.Logging.Log4Net/README.md | 6 +++--- Api.Logging.Microsoft/README.md | 6 +++--- Api.Logging.NLog/README.md | 6 +++--- Api.Logging.Serilog/README.md | 6 +++--- Api.Metrics/README.md | 6 +++--- Api.MultipartJson/README.md | 6 +++--- .../README.md | 6 +++--- Api.PolicyHeaders.ContentTypeOptions/README.md | 6 +++--- Api.PolicyHeaders.Cors/README.md | 6 +++--- Api.PolicyHeaders.ForwardedHeaders/README.md | 6 +++--- Api.PolicyHeaders.FrameOptions/README.md | 6 +++--- Api.PolicyHeaders.Hsts/README.md | 6 +++--- Api.PolicyHeaders.ReferrerPolicy/README.md | 6 +++--- Api.PolicyHeaders.Robots/README.md | 6 +++--- Api.PolicyHeaders.XssProtection/README.md | 6 +++--- Api.RequestTracing/README.md | 6 +++--- Api.ResponseCache/README.md | 6 +++--- Api.ResponseCompression/README.md | 6 +++--- Api.Session/README.md | 6 +++--- Api.StartupTasks/README.md | 6 +++--- Api.StaticFiles/README.md | 6 +++--- Api.Storage.Azure/README.md | 8 ++++---- Api.Storage.Local/README.md | 6 +++--- Api.TimeZone/README.md | 6 +++--- Api.Versioning/README.md | 6 +++--- Api.VirusScan/README.md | 8 ++++---- Api._Blank/README.md | 2 +- Console.CustomConfigSection/README.md | 4 ++-- Console.CustomService/README.md | 4 ++-- Console.Data.InMemory/README.md | 10 +++++----- Console.Data.MySql/README.md | 10 +++++----- Console.Data.PostgreSQL/README.md | 10 +++++----- Console.Data.SqLite/README.md | 10 +++++----- Console.Data.SqlServer/README.md | 10 +++++----- Console.Eventing.RabbitMq/README.md | 6 +++--- Console.ExceptionHandling/README.md | 4 ++-- Console.Localization/README.md | 4 ++-- Console.Logging.Log4Net/README.md | 4 ++-- Console.Logging.Microsoft/README.md | 4 ++-- Console.Logging.NLog/README.md | 4 ++-- Console.Logging.Serilog/README.md | 4 ++-- Console.StartupTasks/README.md | 4 ++-- Console.Storage.Azure/README.md | 4 ++-- Console.Storage.Local/README.md | 4 ++-- Console.Workers/README.md | 4 ++-- Console._Blank/README.md | 2 +- Web._Blank/README.md | 2 +- 91 files changed, 310 insertions(+), 316 deletions(-) diff --git a/Api.ApiClients.Audit/README.md b/Api.ApiClients.Audit/README.md index 4b634acf..520fb667 100644 --- a/Api.ApiClients.Audit/README.md +++ b/Api.ApiClients.Audit/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -16,7 +16,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Api.ApiClients](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.ApiClients)**. All the custom methods have been removed and replaced +This application builds on **[Api.ApiClients](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.ApiClients)**. All the custom methods have been removed and replaced with corresponding methods for each audit controller operation in the inner service. The inner application has a data provider enabled to demonstrate the generic API client integration with Nano entity models. A `NanoApiClient` implementation, derived from @@ -33,10 +33,4 @@ The following endpoint is available for testing. | -------------------------------------------- | ----------------------------------------------------------------------------------------------------- | | `http://localhost:8080/api/examples/create` | Returns a `200 OK` response. Creates an `Example` with nested `ExampleNavigation` which is audited. | -> 📖 Learn more about **[Nano Api Clients](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App/README.md#api-clients)**. - - - - - - +> 📖 Learn more about **[Nano Api Clients](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#api-clients)**. diff --git a/Api.ApiClients.Entity/README.md b/Api.ApiClients.Entity/README.md index e75c3c09..194d1135 100644 --- a/Api.ApiClients.Entity/README.md +++ b/Api.ApiClients.Entity/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -16,7 +16,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Api.ApiClients](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.ApiClients)**. All the custom methods have been removed and replaced +This application builds on **[Api.ApiClients](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.ApiClients)**. All the custom methods have been removed and replaced with corresponding methods for each entity controller operation in the inner service. The inner application has a data provider enabled to demonstrate the generic API client integration with Nano entity models. A `NanoApiClient` implementation, derived from @@ -27,4 +27,4 @@ The endpoints mirror those of the entity controller in the inner service, allowi real-world scenario, this structure would typically differ. The outer application would define its own request and response contracts tailored to its domain. However, for simplicity and clarity in this example, the responses from the inner service are passed directly through the outer API. -> 📖 Learn more about **[Nano Api Clients](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App/README.md#api-clients)**. +> 📖 Learn more about **[Nano Api Clients](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#api-clients)**. diff --git a/Api.ApiClients.RootLogIn/README.md b/Api.ApiClients.RootLogIn/README.md index e6cc353d..576212b9 100644 --- a/Api.ApiClients.RootLogIn/README.md +++ b/Api.ApiClients.RootLogIn/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -16,7 +16,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Api.ApiClients](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.ApiClients)**. All custom methods have been removed and replaced +This application builds on **[Api.ApiClients](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.ApiClients)**. All custom methods have been removed and replaced with a new method that triggers the configured root login. The service is configured with Root Login and JWT authentication enabled, along with a concrete implementation of `BaseAuthController`. When invoking methods through the @@ -28,4 +28,4 @@ The following endpoint is available for testing. | ------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------- | | `http://localhost:8080/api/examples/auto-authenticate-root` | Returns a `200 OK` response. Uses the API client’s automatic root login to obtain and return an access token. | -> 📖 Learn more about **[Nano Api Clients](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App/README.md#api-clients)**. +> 📖 Learn more about **[Nano Api Clients](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#api-clients)**. diff --git a/Api.ApiClients/README.md b/Api.ApiClients/README.md index 06f0aced..c1cec99d 100644 --- a/Api.ApiClients/README.md +++ b/Api.ApiClients/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)**. +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)**. This lesson demonstrates how to connect one API application to another using Nano’s built-in API client, enabling seamless communication between services. @@ -28,7 +28,7 @@ the outer application has been configured to include the API client, enabling it A health check is configured to target the application of the api-client. Open **[http://localhost:8080/healthz](http://localhost:8080/healthz)** to view the health-check status in the JSON response. -> 📖 Learn more about **[Nano Health Checks](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#health-checks)**. +> 📖 Learn more about **[Nano Health Checks](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#health-checks)**. The following endpoint is available for testing. @@ -41,7 +41,7 @@ The following endpoint is available for testing. | `http://localhost:8080/api/examples/problem-details-exception` | Returns a `417 Expectation Failed` response. A `ProblemDetailsException` is thrown to demonstrate structured error handling using Problem Details. | | `http://localhost:8080/api/examples/request-tracing` | Returns a `200 OK` response. The `X-Request-Id` header is extracted from the request and returned in the response for traceability purposes. | -> 📖 Learn more about **[Nano Api Clients](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App/README.md#api-clients)**. +> 📖 Learn more about **[Nano Api Clients](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#api-clients)**. ## Configuration Configured the application with a connection to the `NanoApiClient`. diff --git a/Api.Auth.External.Custom/README.md b/Api.Auth.External.Custom/README.md index 5252ffaf..884122b6 100644 --- a/Api.Auth.External.Custom/README.md +++ b/Api.Auth.External.Custom/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -19,7 +19,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [GitHub Actions](#github-actions) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a derived `AuthController` as well as a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a derived `AuthController` as well as a simple test controller that inherits from the top-level Nano `BaseController`. The JWT authentication scheme has been configured, and a `BaseAuthExternalRepository` implementation named `ExternalProviderCustomRepository`, with `Custom` as provider-name, @@ -31,7 +31,7 @@ provider in Nano. API documentation has been configured to make it easier to explore the available actions in the `AuthController`. Any actions that are not enabled due to omitted configuration are automatically excluded. The API documentation is available at: **http://localhost:8080/docs**. -> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#documentation)**. +> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#documentation)**. The following endpoint from the auth controller is available for testing. @@ -46,7 +46,7 @@ Additionally, the following endpoint is available for testing authorization. | -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | | `http://localhost:8080/api/examples/authenticate` | Returns a simple `200 OK` response, when JWT authorization is successful, and otherwise a `401 Unauthorized`. | -> 📖 Learn more about **[Nano Authentication](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#authentication)**. +> 📖 Learn more about **[Nano Authentication](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#authentication)**. ## Configuration Configured the application with the necessary authentication setup. diff --git a/Api.Auth.RootLogin/README.md b/Api.Auth.RootLogin/README.md index b11731fb..7f951ac6 100644 --- a/Api.Auth.RootLogin/README.md +++ b/Api.Auth.RootLogin/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -19,7 +19,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [GitHub Actions](#github-actions) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a derived `AuthController` as well as a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a derived `AuthController` as well as a simple test controller that inherits from the top-level Nano `BaseController`. The JWT authentication scheme has been configured. Simply invoke the root login endpoint and use the returned JWT token in the `Authorization` header to authenticate when calling @@ -28,7 +28,7 @@ the example controller endpoint. API documentation has been configured to make it easier to explore the available actions in the `AuthController`. Any actions that are not enabled due to omitted configuration are automatically excluded. The API documentation is available at: **http://localhost:8080/docs**. -> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#documentation)**. +> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#documentation)**. The following endpoint from the auth controller is available for testing. @@ -42,7 +42,7 @@ Additionally, the following endpoint is available for testing authorization. | -------------------------------------------------- | -------------------------------------------------------------------------------------------------------------- | | `http://localhost:8080/api/examples/authenticate` | Returns a simple `200 OK` response, when JWT authorization is successful, and otherwise a `401 Unauthorized`. | -> 📖 Learn more about **[Nano Authentication](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#authentication)**. +> 📖 Learn more about **[Nano Authentication](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#authentication)**. ## Configuration Configured the application with the necessary authentication setup. diff --git a/Api.Authorization/README.md b/Api.Authorization/README.md index a8c62533..86595b84 100644 --- a/Api.Authorization/README.md +++ b/Api.Authorization/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -16,7 +16,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Api.Auth.RootLogin](https://github.com/Nano-Core/Nano.Lessons/tree/master/Auth.RootLogin)**. +This application builds on **[Api.Auth.RootLogin](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Auth.RootLogin)**. A custom authorization policy has been configured for the application. The `ServiceCollectionExtensions.AddCustomAuthorizationPolicy(...)` method adds the `CustomPolicy`, and the `/forbidden` endpoint enforces the policy using a custom `[Authorize(Policy = "CustomPolicy")]` annotation. The policy itself requires the JWT token to contain @@ -28,7 +28,7 @@ are automatically excluded. In this example, only the root login action is expos API documentation has been configured to make it easier to explore the available actions in the `AuthController`. Any actions that are not enabled due to omitted configuration are automatically excluded. The API documentation is available at: **http://localhost:8080/docs**. -> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#documentation)**. +> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#documentation)**. The following endpoint from the auth controller is available for testing. @@ -43,4 +43,4 @@ Additionally, the following endpoint is available for testing authorization. | `http://localhost:8080/api/examples/authenticate` | Returns a simple `200 OK` response, when JWT authorization is successful. | | `http://localhost:8080/api/examples/forbidden` | Returns a simple `200 OK` response, when JWT authorization is successful with `CustomClaim`, otherwise returns `403 FORBIDDEN` response. | -> 📖 Learn more about **[Nano Authentication](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#authentication)**. +> 📖 Learn more about **[Nano Authentication](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#authentication)**. diff --git a/Api.ContentNegotiation/README.md b/Api.ContentNegotiation/README.md index 9aeb4898..7d19c253 100644 --- a/Api.ContentNegotiation/README.md +++ b/Api.ContentNegotiation/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -16,7 +16,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This example demonstrates how Nano handles a missing `Accept` header by defaulting the response format to JSON. @@ -27,4 +27,4 @@ The following endpoint is available for testing: | --------------------------------------------------------- | --------------------------------------------------------------------------------- | | `http://localhost:8080/api/examples/content-negotiation` | Returns a simple `200 OK` response, no matter if `Accept` header is set or not. | -> 📖 Learn more about **[Nano Content Negotiation](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#content-negotiation)**. +> 📖 Learn more about **[Nano Content Negotiation](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#content-negotiation)**. diff --git a/Api.Cookies/README.md b/Api.Cookies/README.md index b2787c1b..9b01b482 100644 --- a/Api.Cookies/README.md +++ b/Api.Cookies/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -16,7 +16,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This example demonstrates the use of cookies in a Nano application. @@ -29,5 +29,5 @@ The following endpoint is available for testing: | `http://localhost:8080/api/examples/get-cookie` | Gets a cookie if set and returns a `200 OK`. | | `http://localhost:8080/api/examples/delete-cookie` | Deletes the cookie and returns a `200 OK`. | -> 📖 Learn more about **[Nano Cookies](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Apid#cookies)**. +> 📖 Learn more about **[Nano Cookies](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api#cookies)**. diff --git a/Api.CustomConfigSection/README.md b/Api.CustomConfigSection/README.md index 74dcdc22..ec191bb3 100644 --- a/Api.CustomConfigSection/README.md +++ b/Api.CustomConfigSection/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Rememmber to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -18,7 +18,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Registration](#registration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This example illustrates how custom configuration sections can be effortlessly registered within a Nano application. @@ -29,7 +29,7 @@ The following endpoint is available for testing. | ----------------------------------------------------------- | -------------------------------------------------------------------------- | | `http://localhost:8080/api/examples/custom-config-section` | Returns a simple `200 OK` response with the custom configuration value. | -> 📖 Learn more about **[Nano Custom Configuration Sections](https://github.com/Nano-Core/Nano.Library/Nano.App.Api/README.md#custom-configuration-section)**. +> 📖 Learn more about **[Nano Custom Configuration Sections](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#custom-configuration-section)**. ## Configuration A custom configuration section has been added to `appsettings.json`: diff --git a/Api.CustomMiddleware/README.md b/Api.CustomMiddleware/README.md index 9a1136fb..4112358c 100644 --- a/Api.CustomMiddleware/README.md +++ b/Api.CustomMiddleware/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Registration](#registration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This example illustrates how custom middleware can be registered within a Nano application. @@ -28,7 +28,7 @@ The following endpoint is available for testing: | ------------------------------------------------------- | ------------------------------------------------------------ | | `http://localhost:8080/api/examples/custom-middleware` | Returns a simple `200 OK` response, with the custom header. | -> 📖 Learn more about **[Nano Custom Middleware](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#custom-middleware)**. +> 📖 Learn more about **[Nano Custom Middleware](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#custom-middleware)**. ## Registration The application register custom middleware that adds a header `CustomMiddleware` to all response with the value `awesome`, as shown below. diff --git a/Api.CustomService/README.md b/Api.CustomService/README.md index 7c6a3071..0420a543 100644 --- a/Api.CustomService/README.md +++ b/Api.CustomService/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Registration](#registration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This example demonstrates how a custom service implementation can be registered and used within a Nano application. @@ -28,7 +28,7 @@ The following endpoint is available for testing. | ---------------------------------------------------- | -------------------------------------------------------------------------------- | | `http://localhost:8080/api/examples/custom-servuce` | Returns a simple `200 OK` response, with a message from the `IExampleServuce` | -> 📖 Learn more about **[Nano Custom Services](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App/README.md#custom-services)**. +> 📖 Learn more about **[Nano Custom Services](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#custom-services)**. ## Registration A custom service, `IExampleService` has been added and implemented. In `program.cs` the service is registered using `ConfigureService(...)` method as shown below diff --git a/Api.Data.Audit/README.md b/Api.Data.Audit/README.md index 1f95c3f1..0e86567a 100644 --- a/Api.Data.Audit/README.md +++ b/Api.Data.Audit/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -16,7 +16,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.MySql)**, but any data provider can be used to +This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql)**, but any data provider can be used to demonstrate audit logging. Entity controllers have been simplified to showcase autosave; full controllers are unnecessary. Also an `AuditControlller` derived from `BaseAuditControlller` has been added. @@ -32,6 +32,6 @@ we are invoking the endpoint with an unauthenticated user. Also, API documentation has been configured, in order to easier see which audit endpoints are available. It can be accessed here: **[http://localhost:8080/docs](http://localhost:8080/docs)**. -> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#documentation)**. +> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#documentation)**. -> 📖 Learn more about **[Nano Data Audit](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#audit)**. +> 📖 Learn more about **[Nano Data Audit](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#audit)**. diff --git a/Api.Data.EntityEvents/README.md b/Api.Data.EntityEvents/README.md index f783dcec..d8bed3f3 100644 --- a/Api.Data.EntityEvents/README.md +++ b/Api.Data.EntityEvents/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -16,8 +16,8 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.MySql)**, but any data provider can be used to -demonstrate entity events. Additionally, eventing has been enabled mirroring the setup from **[Api.Eventing.RabbityMq](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Eventing.RabbityMq)**, +This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql)**, but any data provider can be used to +demonstrate entity events. Additionally, eventing has been enabled mirroring the setup from **[Api.Eventing.RabbityMq](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Eventing.RabbitMq)**, but any eventing provider can be used. New entity controllers have been added for use with showcasing entity events. An additional application has been added to the solution. In a typical architecture, this application would be placed in a separate solution. However, for the purpose of demonstrating @@ -30,7 +30,7 @@ entity relationships can be inspected directly in the codebase. Also an `OnInserting` and `OnUpdating` trigger has been mapped for `Customer`, to show how the entity events will get the updated value. -> 📖 Learn more about **[Nano Data Triggers](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#triggers)**. +> 📖 Learn more about **[Nano Data Triggers](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#triggers)**. Both `Person` and `Customer` are annotated with the `PublishAttribute`, and define property names that determine which fields should trigger publish events on added, modified, and deleted actions. Several controllers have also been added to support these entities, enabling various create, update, and delete operations to trigger `Customer` entity events. When @@ -40,4 +40,4 @@ for the `Customer`. It is also important to note that `Customer` inherits publishable property definitions from `Person`. To ensure all property names defined across the entire inheritance hierarchy are included, Nano aggregates the `PublishAttribute` metadata and hydrates entities both forward (for direct changes) and in reverse (via foreign key relationships) to capture deferred changes. -> 📖 Learn more about **[Nano Data Entity Events](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#entity-events)**. +> 📖 Learn more about **[Nano Data Entity Events](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#entity-events)**. diff --git a/Api.Data.Identity.Auth.ApiKey/README.md b/Api.Data.Identity.Auth.ApiKey/README.md index 5f34e140..1d3c1a37 100644 --- a/Api.Data.Identity.Auth.ApiKey/README.md +++ b/Api.Data.Identity.Auth.ApiKey/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -19,7 +19,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [GitHub Actions](#github-actions) ## Summary -This application builds on **[Api.Data.Identity.Auth.Jwt](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.Identity.Auth.Jwt)**. +This application builds on **[Api.Data.Identity.Auth.Jwt](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.Identity.Auth.Jwt)**. The service has been configured for API key authentication. Nothing else has changed. It demonstrates how to manage API keys in Nano, and how to use both JWT and API key authentication concurrently. Use the `auth/login/apikey` to authenticate and receive a JWT token, to use in subsequent requests. @@ -29,7 +29,7 @@ Try out the different API key identity and authentication methods. API documentation has been configured to make it easier to explore the available actions in the `AuthController`. Any actions that are not enabled due to omitted configuration are automatically excluded. The API documentation is available at: **http://localhost:8080/docs**. -> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#documentation)**. +> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#documentation)**. The following endpoint from the auth controller is available for testing: @@ -42,7 +42,7 @@ The following endpoint from the auth controller is available for testing: Additionally, the identity controller is also avaialble, and the actions can be used for testing authorization. -> 📖 Learn more about **[Nano API Key Authentication](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#authentication)**. +> 📖 Learn more about **[Nano API Key Authentication](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#authentication)**. ## Configuration Configured the application with the necessary authentication setup, in addition to the existing identity and jwt configuration. diff --git a/Api.Data.Identity.Auth.External.Custom/README.md b/Api.Data.Identity.Auth.External.Custom/README.md index 43ebf51f..b6eb7bdb 100644 --- a/Api.Data.Identity.Auth.External.Custom/README.md +++ b/Api.Data.Identity.Auth.External.Custom/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -16,7 +16,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Api.Data.Identity.Auth.Jwt](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.Identity.Auth.Jwt)**. +This application builds on **[Api.Data.Identity.Auth.Jwt](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.Identity.Auth.Jwt)**. The JWT authentication scheme remains configured, and a `BaseAuthExternalRepository` implementation named `ExternalProviderCustomRepository`, with `Custom` as provider-name, has been added. As a result, additional endpoints from the `AuthController` are now exposed, as shown below. @@ -27,7 +27,7 @@ provider in Nano. API documentation has been configured to make it easier to explore the available actions in the `AuthController`. Any actions that are not enabled due to omitted configuration are automatically excluded. The API documentation is available at: **http://localhost:8080/docs**. -> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#documentation)**. +> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#documentation)**. The following endpoint from the auth controller is available for testing: @@ -48,5 +48,5 @@ The following new endpoints related to the custom authentication provider from t | `http://localhost:8080/api/users/{id}/external-logins/add/custom` | Adds a `Custom` external login to a user account. | | `http://localhost:8080/api/users/{id}/external-logins/remove/custom` | Removes an `Custom` login from a user account. | -> 📖 Learn more about **[Nano Authentication](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#authentication)**. +> 📖 Learn more about **[Nano Authentication](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#authentication)**. diff --git a/Api.Data.Identity.Auth.Jwt/README.md b/Api.Data.Identity.Auth.Jwt/README.md index a8c3c174..f8660aeb 100644 --- a/Api.Data.Identity.Auth.Jwt/README.md +++ b/Api.Data.Identity.Auth.Jwt/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -19,7 +19,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [GitHub Actions](#github-actions) ## Summary -This application builds on **[Api.Data.Identity](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.Identity)** and adds a derived `AuthController`. +This application builds on **[Api.Data.Identity](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.Identity)** and adds a derived `AuthController`. Nothing else has changed for this example. The derived `AuthController` enables the identity users in the application to use the three endpoints inherited from the `BaseAuthController`. @@ -27,7 +27,7 @@ the `BaseAuthController`. API documentation has been configured to make it easier to explore the available actions in the `AuthController`. Any actions that are not enabled due to omitted configuration are automatically excluded. The API documentation is available at: **http://localhost:8080/docs**. -> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#documentation)**. +> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#documentation)**. The following endpoint from the auth controller is available for testing: @@ -39,7 +39,7 @@ The following endpoint from the auth controller is available for testing: Additionally, the identity controller is also avaialble, and the actions can be used for testing authorization. -> 📖 Learn more about **[Nano Authentication](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#authentication)**. +> 📖 Learn more about **[Nano Authentication](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#authentication)**. ## Configuration Configured the application with the necessary authentication setup, in addition to the identity configuration. diff --git a/Api.Data.Identity/README.md b/Api.Data.Identity/README.md index 4edd3d67..bb4e8017 100644 --- a/Api.Data.Identity/README.md +++ b/Api.Data.Identity/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.MySql)**, but any data provider can be used to +This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql)**, but any data provider can be used to demonstrate repository autosave. Entity controllers have been simplified to showcase identity; full controllers are unnecessary. The `User` entity model, `UserMapping` data mapping, `UserQueryCriteria` query criteria and the `UsersControlller` has been added to the solutiin. The controller is deriving @@ -28,12 +28,12 @@ The application is configured to audit all identity models. Also, API documentation has been configured, in order to easier see which audit endpoints are available. It can be accessed here: **[http://localhost:8080/docs](http://localhost:8080/docs)**. -> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#documentation)**. +> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#documentation)**. Not all identity actions are enabled in this example. It demonstrates identity functionality without any authentication enabled. Other lessons cover the different supported authentication methods and the corresponding identity actions to manage them. -> 📖 Learn more about **[Nano Data Identity](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#identity)**. +> 📖 Learn more about **[Nano Data Identity](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#identity)**. ## Configuration The data identity has been configured for the application. The `UseAudit` ahs been set to `All` in order to audit log all identity changes. Normally, you would probably be more diff --git a/Api.Data.InMemory/README.md b/Api.Data.InMemory/README.md index 2bdd8a89..5430295c 100644 --- a/Api.Data.InMemory/README.md +++ b/Api.Data.InMemory/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -18,26 +18,26 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a test controller that inherits from +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a test controller that inherits from the Nano `BaseEntityControllerr`. The available entity endpoints are inherited, and no additional endpoints has been added. This example demonstrates how various parts of Nano data work together. All data configuration and registration have been completed, and classes have been implemented -for the data parts, including [Data Models](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-models), [Data Mappings](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-mappings), -and the [Data Context](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-context). As the in-memory data provider doesn't use migrations there is no need +for the data parts, including [Data Models](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-models), [Data Mappings](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-mappings), +and the [Data Context](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-context). As the in-memory data provider doesn't use migrations there is no need to implement the `BaseDbContextFactory`. -Additionally, the example shows how Nano [Data Repository](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#repositories) works along with the corresponding -entity controllers. For more information on controllers and how they are connected with entity models, see [Nano Entity Controllers](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#controllers). +Additionally, the example shows how Nano [Data Repository](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#repositories) works along with the corresponding +entity controllers. For more information on controllers and how they are connected with entity models, see [Nano Entity Controllers](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#controllers). Also, API documentation has been configured, in order to easier see which endpoints are available. It can be accessed here: **[http://localhost:8080/docs](http://localhost:8080/docs)**. -> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#documentation)**. +> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#documentation)**. Additionally, controllers have been implemented to demonstrate controllers for creatable, updatable, creatable-and-updatable, and deletable entities. When viewing the API documentation, observe how the available endpoints differ depending on the capabilities supported by each controller. -> 📖 Learn more about **[Nano.Data.InMemory](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.InMemory/README#nanodatainmemory)**. +> 📖 Learn more about **[Nano.Data.InMemory](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.InMemory/README.md#nanodatainmemory)**. ## Registration The following data provider has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Api.Data.LazyLoading/README.md b/Api.Data.LazyLoading/README.md index 6cb45b2f..ef28c355 100644 --- a/Api.Data.LazyLoading/README.md +++ b/Api.Data.LazyLoading/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,13 +17,13 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.MySql)**, but any data provider can be used to +This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql)**, but any data provider can be used to demonstrate repository autosave. Entity controllers have been simplified to showcase autosave; full controllers are unnecessary. Once the object graph is created, notice that only `IncludedRelations` appears in the response. Although `Relations` is lazy-loaded in the code, it is not included because it lacks the `Include` annotation. -> 📖 Learn more about **[Nano Data Lazy Loading](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#lazy-loading)**. +> 📖 Learn more about **[Nano Data Lazy Loading](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#lazy-loading)**. ## Configuration ```json diff --git a/Api.Data.MySql.Collation/README.md b/Api.Data.MySql.Collation/README.md index 9ae5aa06..fa758805 100644 --- a/Api.Data.MySql.Collation/README.md +++ b/Api.Data.MySql.Collation/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.MySql)**. Entity controllers have been +This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql)**. Entity controllers have been simplified to showcase setting mysql default collation; full controllers are unnecessary. This example demonstrates setting the `DefaultCollation` in the `Data` section of the configuration. Notice that querying `Example.Name` with @@ -25,7 +25,7 @@ a case-insensitive collation returns results regardless of letter casing. ⚠️ Note: Changing this setting affects only new migrations and will not modify existing tables or columns. -> 📖 Learn more about **[Nano.Data.MySql](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.MySql/README.md#nanodatamysql)**. +> 📖 Learn more about **[Nano.Data.MySql](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.MySql/README.md#nanodatamysql)**. ## Configuration The collation is set in `appsettings`. diff --git a/Api.Data.MySql.Mappings/README.md b/Api.Data.MySql.Mappings/README.md index 90542d3d..ad2a0144 100644 --- a/Api.Data.MySql.Mappings/README.md +++ b/Api.Data.MySql.Mappings/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -16,7 +16,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.MySql)**. Entity controllers have been +This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql)**. Entity controllers have been simplified to showcase setting mysql views; full controllers are unnecessary. Three new entity models have been added, each demonstrating different types of advanced mappings. The first, `ExampleJson`, shows how to store a complex object in a @@ -27,4 +27,4 @@ used for case-insensitive searches, with the LINQ query calling `.ToUpper()` on Last, a unique index has also been added to `Example.NameNormalized`. Observe how Nano renames the index prefixing with 'UX_'. -> 📖 Learn more about **[Nano.Data.MySql](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.MySql/README.md#nanodatamysql)**. +> 📖 Learn more about **[Nano.Data.MySql](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.MySql/README.md#nanodatamysql)**. diff --git a/Api.Data.MySql.Spatial/README.md b/Api.Data.MySql.Spatial/README.md index 49b8f797..9326571f 100644 --- a/Api.Data.MySql.Spatial/README.md +++ b/Api.Data.MySql.Spatial/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -16,10 +16,10 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.MySql)**. Entity controllers have been simplified to +This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql)**. Entity controllers have been simplified to showcase spatial types; full controllers are unnecessary. The `Example` entity now includes a `Point` property from `NetTopologySuite`. A query criterion has been added to check whether points are within a 10,000 meter distance. The entity mappings for this spatial property have also been configured. Otherwise, no other changes were made. -> 📖 Learn more about **[Nano.Data.MySql](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.MySql/README.md#nanodatamysql)**. +> 📖 Learn more about **[Nano.Data.MySql](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.MySql/README.md#nanodatamysql)**. diff --git a/Api.Data.MySql.StoredProcedures/README.md b/Api.Data.MySql.StoredProcedures/README.md index 3fec788c..8c58118b 100644 --- a/Api.Data.MySql.StoredProcedures/README.md +++ b/Api.Data.MySql.StoredProcedures/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -16,7 +16,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.MySql)**. Entity controllers have been +This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql)**. Entity controllers have been simplified to showcase mysql stored procedures; full controllers are unnecessary. This example defines a stored procedure, and creates it during a migration. @@ -35,4 +35,4 @@ The following endpoint is available for testing: | ------------------------------------------------------ | ------------------------------------------------------------------------------------------ | | `http://localhost:8080/api/examples/stored-procedure` | Returns a simple `200 OK` response with the result of the stored procedure as response. | -> 📖 Learn more about **[Nano.Data.MySql](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.MySql/README.md#nanodatamysql)**. +> 📖 Learn more about **[Nano.Data.MySql](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.MySql/README.md#nanodatamysql)**. diff --git a/Api.Data.MySql.Views/README.md b/Api.Data.MySql.Views/README.md index 6706eeea..2593b29a 100644 --- a/Api.Data.MySql.Views/README.md +++ b/Api.Data.MySql.Views/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -16,7 +16,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.MySql)**. Entity controllers have been +This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql)**. Entity controllers have been simplified to showcase mysql views; full controllers are unnecessary. An `ExampleView` entity model (deriving from `BaseEntityView`) has been added, along with a mapping class based on `BaseEntityViewMapping`. The corresponding database view has @@ -29,4 +29,4 @@ migrationBuilder Also, an `ExampleViewsController` (deriving from `BaseEntityViewController`) has been added, exposing query actions for the view. -> 📖 Learn more about **[Nano.Data.MySql](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.MySql/README.md#nanodatamysql)**. +> 📖 Learn more about **[Nano.Data.MySql](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.MySql/README.md#nanodatamysql)**. diff --git a/Api.Data.MySql/README.md b/Api.Data.MySql/README.md index 6d1dd5ec..5573f9a4 100644 --- a/Api.Data.MySql/README.md +++ b/Api.Data.MySql/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -21,30 +21,30 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [GitHub Actions](#github-actions) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a test controller that inherits from +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a test controller that inherits from the Nano `BaseEntityControllerr`. The available entity endpoints are inherited, and no additional endpoints has been added. This example demonstrates how various parts of Nano data work together. All data configuration and registration have been completed, and classes have been implemented -for the data parts, including **[Data Models](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-models)**, **[Data Mappings](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-mappings)**, -and the **[Data Context](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-context)**. +for the data parts, including **[Data Models](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-models)**, **[Data Mappings](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-mappings)**, +and the **[Data Context](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-context)**. -Additionally, the example shows how Nano **[Data Repository](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#repositories)** works along with the corresponding -entity controllers. For more information on controllers and how they are connected with entity models, see **[Nano Entity Controllers](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#controllers)**. +Additionally, the example shows how Nano **[Data Repository](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#repositories)** works along with the corresponding +entity controllers. For more information on controllers and how they are connected with entity models, see **[Nano Entity Controllers](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#controllers)**. A data health check is configured to target the database. Open **[http://localhost:8080/healthz](http://localhost:8080/healthz)** to view the health-check status in the JSON response. -> 📖 Learn more about **[Nano Health Checks](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#health-checks)**. +> 📖 Learn more about **[Nano Health Checks](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#health-checks)**. Also, API documentation has been configured, in order to easier see which endpoints are available. It can be accessed here: **[http://localhost:8080/docs](http://localhost:8080/docs)**. -> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#documentation)**. +> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#documentation)**. Additionally, controllers have been implemented to demonstrate controllers for creatable, updatable, creatable-and-updatable, and deletable entities. When viewing the API documentation, observe how the available endpoints differ depending on the capabilities supported by each controller. -> 📖 Learn more about **[Nano.Data.MySql](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.MySql/README.md#nanodatamysql)**. +> 📖 Learn more about **[Nano.Data.MySql](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.MySql/README.md#nanodatamysql)**. ## Registration The following data provider has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Api.Data.PostgreSQL.Spatial/README.md b/Api.Data.PostgreSQL.Spatial/README.md index 457e15ca..2997b82b 100644 --- a/Api.Data.PostgreSQL.Spatial/README.md +++ b/Api.Data.PostgreSQL.Spatial/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -16,10 +16,10 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Api.Data.PostgreSQL](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.PostgreSQL)**. Entity controllers have been simplified to +This application builds on **[Api.Data.PostgreSQL](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.PostgreSQL)**. Entity controllers have been simplified to showcase spatial types; full controllers are unnecessary. The `Example` entity now includes a `Point` property from `NetTopologySuite`. A query criterion has been added to check whether points are within a 10,000 meter distance. The entity mappings for this spatial property have also been configured. Otherwise, no other changes were made. -> 📖 Learn more about **[Nano.Data.PostgreSQL](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.PostgreSQL/README.md#nanodatamysql)**. +> 📖 Learn more about **[Nano.Data.PostgreSQL](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.PostgreSQL/README.md#nanodatapostgresql)**. diff --git a/Api.Data.PostgreSQL/README.md b/Api.Data.PostgreSQL/README.md index f2fa31cd..04ebc449 100644 --- a/Api.Data.PostgreSQL/README.md +++ b/Api.Data.PostgreSQL/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -21,30 +21,30 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [GitHub Actions](#github-actions) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a test controller that inherits from +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a test controller that inherits from the Nano `BaseEntityControllerr`. The available entity endpoints are inherited, and no additional endpoints has been added. This example demonstrates how various parts of Nano data work together. All data configuration and registration have been completed, and classes have been implemented -for the data parts, including **[Data Models](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-models)**, **[Data Mappings](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-mappings)**, -and the **[Data Context](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-context)**. +for the data parts, including **[Data Models](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-models)**, **[Data Mappings](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-mappings)**, +and the **[Data Context](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-context)**. -Additionally, the example shows how Nano [Data Repository](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#repositories) works along with the corresponding -entity controllers. For more information on controllers and how they are connected with entity models, see **[Nano Entity Controllers](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#controllers)**. +Additionally, the example shows how Nano [Data Repository](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#repositories) works along with the corresponding +entity controllers. For more information on controllers and how they are connected with entity models, see **[Nano Entity Controllers](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#controllers)**. A data health check is configured to target the database. Open **[http://localhost:8080/healthz](http://localhost:8080/healthz)** to view the health-check status in the JSON response. -> 📖 Learn more about **[Nano Health Checks](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#health-checks)**. +> 📖 Learn more about **[Nano Health Checks](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#health-checks)**. Also, API documentation has been configured, in order to easier see which endpoints are available. It can be accessed here: **[http://localhost:8080/docs](http://localhost:8080/docs)**. -> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#documentation)**. +> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#documentation)**. Additionally, controllers have been implemented to demonstrate controllers for creatable, updatable, creatable-and-updatable, and deletable entities. When viewing the API documentation, observe how the available endpoints differ depending on the capabilities supported by each controller. -> 📖 Learn more about **[Nano.Data.PostgreSQL](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.PostgreSQL/README.md#nanodatamysql)**. +> 📖 Learn more about **[Nano.Data.PostgreSQL](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.PostgreSQL/README.md#nanodatapostgresqll)**. ## Registration The following data provider has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Api.Data.Repository.AutoSave/README.md b/Api.Data.Repository.AutoSave/README.md index cdd418dd..b2ac4e11 100644 --- a/Api.Data.Repository.AutoSave/README.md +++ b/Api.Data.Repository.AutoSave/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.MySql)**, but any data provider can be used to +This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql)**, but any data provider can be used to demonstrate repository autosave. Entity controllers have been simplified to showcase autosave; full controllers are unnecessary. In this application, autosave has been disabled. When the endpoint is invoked, Nano attempts to persist the entity to the database. However, the `IRepository` does @@ -30,7 +30,7 @@ The following endpoint is available for testing. | ---------------------------------------------- | -------------------------------------------------------------------------------------------------- | | `http://localhost:8080/api/examples/no-save` | Returns a simple `200 OK` response, while trying to add a new `Example`, changes are never saved. | -> 📖 Learn more about **[Nano Data Repository Autosave](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#autosave)**. +> 📖 Learn more about **[Nano Data Repository Autosave](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#autosave)**. ## Configuration Configured the application with the necessary data setup. diff --git a/Api.Data.Repository.Includes/README.md b/Api.Data.Repository.Includes/README.md index 271b41f4..f16ce336 100644 --- a/Api.Data.Repository.Includes/README.md +++ b/Api.Data.Repository.Includes/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.MySql)**, but any data provider can be used to +This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql)**, but any data provider can be used to demonstrate repository include annotations. Entity controllers have been simplified to showcase include annotation; full controllers are unnecessary. The endpoints can be invoked with the `includeDepth` query parameter to override the default configured depth. This makes it easy to experiment with different values @@ -25,7 +25,7 @@ and observe how the returned object graph changes as Nano resolves deeper levels All the navigations in the object graph is annotated with `IncludeAttribute`, except for `Customer.Profile`. Because of this, it is not exposed during response serialization, even that the instance is already loaded in the data context. Only properties explicitly marked for inclusion are serialized in the response. You -can read more about this behavior in the [Response Serialization](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#response-serialization) section. +can read more about this behavior in the [Response Serialization](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#response-serialization) section. Observe how includes and nested includes appear in the response after the entities have been created and subsequently retrieved using `IRepository.GetAsync(...)`. This demonstrates how Nano automatically resolves and serializes the configured include graph according to the effective depth. @@ -41,7 +41,7 @@ The following endpoint is available for testing. | `http://localhost:8080/api/examples/create-and-include` | Returns a simple `200 OK` response. Creates a `Customer` entity and nested included navigation properties, and returns it. ⚠️ If request `includeDepth` is lower than configuration, serialization still exposes the depth using the confoguration. | | `http://localhost:8080/api/examples/not-include` | Returns a simple `200 OK` response with `CustomerResponse`, that is not `IEntity`, and all properties are serialzied and exposed. | -> 📖 Learn more about **[Nano Include Annotation](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#include-annotation)**. +> 📖 Learn more about **[Nano Include Annotation](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#include-annotation)**. ## Configuration Configured the application with the necessary data setup. diff --git a/Api.Data.SoftDelete/README.md b/Api.Data.SoftDelete/README.md index 4203d52b..712b70c7 100644 --- a/Api.Data.SoftDelete/README.md +++ b/Api.Data.SoftDelete/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -16,7 +16,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.MySql)**, but any data provider can be used to +This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql)**, but any data provider can be used to demonstrate soft delete. Entity controllers have been simplified to showcase autosave; full controllers are unnecessary. The `Example` entity implements `IEntitySoftDeletable`, so when an entity is deleted, it is not removed from the database but is marked as deleted @@ -26,4 +26,4 @@ The data mapping also includes two triggers for `OnDeleting` and `OnDeleted` to Open the database and notice that the created `Example` entity has a non-zero `IsDeleted` value, indicating it has been soft-deleted. -> 📖 Learn more about **[Nano Data Soft Delete](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#soft-delete)**. +> 📖 Learn more about **[Nano Data Soft Delete](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#soft-delete)**. diff --git a/Api.Data.SqLite/README.md b/Api.Data.SqLite/README.md index 9aef9986..b6e65ebb 100644 --- a/Api.Data.SqLite/README.md +++ b/Api.Data.SqLite/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -21,30 +21,30 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [GitHub Actions](#github-actions) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a test controller that inherits from +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a test controller that inherits from the Nano `BaseEntityControllerr`. The available entity endpoints are inherited, and no additional endpoints has been added. This example demonstrates how various parts of Nano data work together. All data configuration and registration have been completed, and classes have been implemented -for the data parts, including [Data Models](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-models), [Data Mappings](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-mappings), -and the [Data Context](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-context). +for the data parts, including [Data Models](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-models), [Data Mappings](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-mappings), +and the [Data Context](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-context). -Additionally, the example shows how Nano [Data Repository](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#repositories) works along with the corresponding -entity controllers. For more information on controllers and how they are connected with entity models, see [Nano Entity Controllers](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#controllers). +Additionally, the example shows how Nano [Data Repository](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#repositories) works along with the corresponding +entity controllers. For more information on controllers and how they are connected with entity models, see [Nano Entity Controllers](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#controllers). A data health check is configured to target the database. Open **[http://localhost:8080/healthz](http://localhost:8080/healthz)** to view the health-check status in the JSON response. -> 📖 Learn more about **[Nano Health Checks](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#health-checks)**. +> 📖 Learn more about **[Nano Health Checks](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#health-checks)**. Also, API documentation has been configured, in order to easier see which endpoints are available. It can be accessed here: **[http://localhost:8080/docs](http://localhost:8080/docs)**. -> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#documentation)**. +> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#documentation)**. Additionally, controllers have been implemented to demonstrate controllers for creatable, updatable, creatable-and-updatable, and deletable entities. When viewing the API documentation, observe how the available endpoints differ depending on the capabilities supported by each controller. -> 📖 Learn more about **[Nano.Data.SqLite](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.SqLite/README.md#nanodatamysql)**. +> 📖 Learn more about **[Nano.Data.SqLite](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.SqLite/README.md#nanodatasqlite)**. ## Registration The following data provider has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Api.Data.SqlServer.Spatial/README.md b/Api.Data.SqlServer.Spatial/README.md index 07691b06..bc731a2c 100644 --- a/Api.Data.SqlServer.Spatial/README.md +++ b/Api.Data.SqlServer.Spatial/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Migrations](#migrations) ## Summary -This application builds on **[Api.Data.SqlServer](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.SqlServer)**. Entity controllers have been simplified to +This application builds on **[Api.Data.SqlServer](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.SqlServer)**. Entity controllers have been simplified to showcase spatial types; full controllers are unnecessary. The `Example` entity now includes a `Point` property from `NetTopologySuite`. A query criterion has been added to check whether points are within a 10,000 meter distance. The @@ -32,4 +32,4 @@ migrationBuilder USING GEOGRAPHY_GRID"); ``` -> 📖 Learn more about **[Nano.Data.SqlServer](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.SqlServer/README.md#nanodatamysql)**. +> 📖 Learn more about **[Nano.Data.SqlServer](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.SqlServer/README.md#nanodatasqlserver)**. diff --git a/Api.Data.SqlServer/README.md b/Api.Data.SqlServer/README.md index 4bfaafca..c84aff04 100644 --- a/Api.Data.SqlServer/README.md +++ b/Api.Data.SqlServer/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -21,30 +21,30 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [GitHub Actions](#github-actions) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a test controller that inherits from +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a test controller that inherits from the Nano `BaseEntityControllerr`. The available entity endpoints are inherited, and no additional endpoints has been added. This example demonstrates how various parts of Nano data work together. All data configuration and registration have been completed, and classes have been implemented -for the data parts, including **[Data Models](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-models)**, **[Data Mappings](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-mappings)**, -and the **[Data Context](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-context)**. +for the data parts, including **[Data Models](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-models)**, **[Data Mappings](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-mappings)**, +and the **[Data Context](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-context)**. -Additionally, the example shows how Nano **[Data Repository](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#repositories)** works along with the corresponding -entity controllers. For more information on controllers and how they are connected with entity models, see **[Nano Entity Controllers](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#controllers)**. +Additionally, the example shows how Nano **[Data Repository](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#repositories)** works along with the corresponding +entity controllers. For more information on controllers and how they are connected with entity models, see **[Nano Entity Controllers](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#controllers)**. A data health check is configured to target the database. Open **[http://localhost:8080/healthz](http://localhost:8080/healthz)** to view the health-check status in the JSON response. -> 📖 Learn more about **[Nano Health Checks](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#health-checks)**. +> 📖 Learn more about **[Nano Health Checks](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#health-checks)**. Also, API documentation has been configured, in order to easier see which endpoints are available. It can be accessed here: **[http://localhost:8080/docs](http://localhost:8080/docs)**. -> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#documentation)**. +> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#documentation)**. Additionally, controllers have been implemented to demonstrate controllers for creatable, updatable, creatable-and-updatable, and deletable entities. When viewing the API documentation, observe how the available endpoints differ depending on the capabilities supported by each controller. -> 📖 Learn more about **[Nano.Data.SqlServer](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.SqlServer/README.md#nanodatamysql)**. +> 📖 Learn more about **[Nano.Data.SqlServer](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.SqlServer/README.md#nanodatasqlserver)**. ## Registration The following data provider has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Api.Data.Triggers/README.md b/Api.Data.Triggers/README.md index 02126d18..12547883 100644 --- a/Api.Data.Triggers/README.md +++ b/Api.Data.Triggers/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -16,11 +16,11 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Data.MySql)**, but any data provider can be used to +This application builds on **[Api.Data.MySql](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Data.MySql)**, but any data provider can be used to demonstrate repository autosave. Entity controllers have been simplified to showcase triggers; full controllers are unnecessary. Triggers for `OnInserting`, `OnInserted`, `OnUpdating`, `OnUpdated`, `OnDeleting`, and `OnDeleted` have been configured in mappings for the `Example` entity model. Whenever the `Example` entity is **added** or **updated**, the `Example.UpdatedAt` property is automatically set to `UtcNow`. Additionally, for each trigger execution, an `ExampleTrigger` entity is created and stored. This serves as a record demonstrating that the trigger was invoked. -> 📖 Learn more about **[Nano Data Triggers](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#triggers)**. +> 📖 Learn more about **[Nano Data Triggers](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#triggers)**. diff --git a/Api.Documentation.Csp/README.md b/Api.Documentation.Csp/README.md index 65025793..61278b81 100644 --- a/Api.Documentation.Csp/README.md +++ b/Api.Documentation.Csp/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Documenation](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Documenation)**. +This application builds on **[Api.Documenation](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Documenation)**. This example shows using API documentation with strict CSP security. Run the solution and open [https://localhost:4443/docs](https://localhost:4443/docs) in your browser to view the API documentation. @@ -28,7 +28,7 @@ Also a CSP hash has been added and the policy configured to allow inline styles | -------------------------------------------------- | -------------------- | | `http://localhost:8080/api/examples/documentation` | Returns a `200 OK`. | -> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#documentation)**. +> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#documentation)**. ## Configuration diff --git a/Api.Documentation/README.md b/Api.Documentation/README.md index 1f878977..bff4447e 100644 --- a/Api.Documentation/README.md +++ b/Api.Documentation/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -19,7 +19,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [GitHub Actions](#gitHub-actions) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This example shows using API documentation for an Nano application. Run the solution and open @@ -32,7 +32,7 @@ for the same example endpoint. When set to `true`, Swagger only displays the non | -------------------------------------------------- | -------------------- | | `http://localhost:8080/api/examples/documentation` | Returns a `200 OK`. | -> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#documentation)**. +> 📖 Learn more about **[Nano API Documentation](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#documentation)**. ## Configuration ```json diff --git a/Api.ErrorHandling/README.md b/Api.ErrorHandling/README.md index cec2c4c9..7091b3bb 100644 --- a/Api.ErrorHandling/README.md +++ b/Api.ErrorHandling/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This example demonstrates how Nano API error handling processes exceptions and other errors to produce the appropriate HTTP responses. @@ -42,7 +42,7 @@ The following endpoint is available for testing: Alternatively, toggle the `ExposeErrors` to `false`, and observe that messages from `500 Internal Server Errors` no longer will be exposed. -> 📖 Learn more about **[Nano Error Handling](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#error-handling)**. +> 📖 Learn more about **[Nano Error Handling](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#error-handling)**. ## Configuration ```json diff --git a/Api.Eventing.RabbitMq/README.md b/Api.Eventing.RabbitMq/README.md index 9b00625a..d5ff6c68 100644 --- a/Api.Eventing.RabbitMq/README.md +++ b/Api.Eventing.RabbitMq/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -20,7 +20,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Kubernetes](#kubernetes) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. While it is uncommon for the same application to both publish and consume an event, this pattern is used here for demonstration purposes. @@ -35,7 +35,7 @@ You can also monitor the messages via the RabbitMQ management interface: **[http An eventing health check is configured to target the RabbitMQ. Open **[http://localhost:8080/healthz](http://localhost:8080/healthz)** to view the health-check status in the JSON response. -> 📖 Learn more about **[Nano Health Checks](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#health-checks)** +> 📖 Learn more about **[Nano Health Checks](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#health-checks)** The following endpoint is available for testing: @@ -44,7 +44,7 @@ The following endpoint is available for testing: | `http://localhost:8080/api/examples/eventing` | Returns a simple `200 OK` response. Publishes a message that wiil be consumed by the `EventHandler` | | `http://localhost:8080/api/examples/eventing-routing-key` | Returns a simple `200 OK` response. Publishes a message using routing key that wiil be consumed by the `EventHandler` | -> 📖 Learn more about **[Nano.Eventing.RabbitMq](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Eventing.RabbitMq/README.md#nanoeventingrabbitmq)**. +> 📖 Learn more about **[Nano.Eventing.RabbitMq](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Eventing.RabbitMq/README.md#nanoeventingrabbitmq)**. ## Registration The following eventing provider has been registered using `ConfigureServices(...)` in `program.cs`. @@ -157,4 +157,4 @@ spec: key: password ``` -> ⚠️ The `rabbitmq` secret is created alongside the **[Nano.Azure.Kubernetes.RabbitMQ](https://github.com/Nano-Core/Nano.Azure.Kubernetes/tree/master/Nano.Azure.Kubernetes.RabbitMQ)** +> ⚠️ The `rabbitmq` secret is created alongside the **[Nano.Azure.Kubernetes.RabbitMQ](https://github.com/Nano-Core/Nano.Azure.Kubernetes/blob/master/Nano.Azure.Kubernetes.RabbitMQ)** diff --git a/Api.HealthChecks/README.md b/Api.HealthChecks/README.md index 0720ecca..906dbb70 100644 --- a/Api.HealthChecks/README.md +++ b/Api.HealthChecks/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -18,7 +18,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [GitHub Actions](#gitHub-actions) ## Summary -This application builds on **[Api.Hosting.Https](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Hosting.Https)** and adds a simple test controller +This application builds on **[Api.Hosting.Https](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Hosting.Https)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This example illustrates the use of Nano API health-checks. @@ -31,7 +31,7 @@ The following endpoints are available for testing. | ------------------------------------------------- | ------------------------------------------------------ | | `http://localhost:8080/api/examples/health-check` | Returns a `200 OK` response with health-check status. | -> 📖 Learn more about **[Nano Health Checks](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Apihealth-checks)**. +> 📖 Learn more about **[Nano Health Checks](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api#health-checks)**. ## Configuration There is no configuration for HealtCheck, the section has just been added to enable the feature. diff --git a/Api.Hosting.Http/README.md b/Api.Hosting.Http/README.md index 13c5fa45..5419fa29 100644 --- a/Api.Hosting.Http/README.md +++ b/Api.Hosting.Http/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -16,7 +16,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. The rest of the setup remains largely unchanged. This example simply shows configuring a Nano application for HTTP exposure. @@ -27,4 +27,4 @@ The following endpoint is available for testing: | ------------------------------------------ | -------------------------------------- | | `http://localhost:8080/api/examples/http` | Returns a simple `200 OK` response. | -> 📖 Learn more about **[Nano Hosting Http](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#http)**. +> 📖 Learn more about **[Nano Hosting Http](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#http)**. diff --git a/Api.Hosting.Https/README.md b/Api.Hosting.Https/README.md index 37598f0e..3d027dba 100644 --- a/Api.Hosting.Https/README.md +++ b/Api.Hosting.Https/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -20,7 +20,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [GitHub Actions](#gitHub-actions) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This example simply shows configuring a Nano application for HTTPS exposure. @@ -35,7 +35,7 @@ The following endpoints are available for testing: | `http://localhost:8080/api/examples/http` | Redirects to HTTPS. | | `https://localhost:4443/api/examples/https` | Returns a simple `200 OK` response. | -> 📖 Learn more about **[Nano Hosting HTTPS](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#https)**. +> 📖 Learn more about **[Nano Hosting HTTPS](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#https)**. ## Configuration For `appsettings.json`, nothing has changed - HTTP is still exposed. diff --git a/Api.Hosting.MultipartLimits/README.md b/Api.Hosting.MultipartLimits/README.md index b8b04620..d5e4fdee 100644 --- a/Api.Hosting.MultipartLimits/README.md +++ b/Api.Hosting.MultipartLimits/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This example demonstrates upload limits configured for a Nano application. @@ -30,7 +30,7 @@ The following endpoint is available for testing. | ------------------------------------------------- | -------------------------------------------------------- | | `http://localhost:8080/api/examples/upload-file` | Upload a file, if larger than 1 MB it will be rejected. | -> 📖 Learn more about **[Nano MultiPart Limits](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Apimultipart-limits)**. +> 📖 Learn more about **[Nano MultiPart Limits](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api#multipart-limits)**. ## Configuration Added the following configuration to `appsettings.json`. diff --git a/Api.Localization/README.md b/Api.Localization/README.md index e3071475..12d883cc 100644 --- a/Api.Localization/README.md +++ b/Api.Localization/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This example shows how to use localized requests in Nano. @@ -36,7 +36,7 @@ The controller return a response in the following format: | ------------------------------------------------- | ---------------------------------------------------------------- | | `http://localhost:8080/api/examples/localization` | Returns a `200 OK` response with names of the culture langauge. | -> 📖 Learn more about **[Nano Localization](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#localization)**. +> 📖 Learn more about **[Nano Localization](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#localization)**. ## Configuration diff --git a/Api.Logging.Log4Net/README.md b/Api.Logging.Log4Net/README.md index 374f470e..d8029315 100644 --- a/Api.Logging.Log4Net/README.md +++ b/Api.Logging.Log4Net/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -18,7 +18,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This application demonstrates logging with Log4Net for a API application. Also note the `LogLevelOverrides` configuration, @@ -31,7 +31,7 @@ The following endpoint is available for testing: | `http://localhost:8080/api/examples/logging` | Returns a simple `200 OK` response. Won't log the `.LogDebug(...)` due to configuration `LogLevel=Information`. | | `http://localhost:8080/api/examples/logging-exception` | Returns a simple `500 Internal Server Error` response. The exception will be logged. | -> 📖 Learn more about **[Nano.Logging.Log4Net](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging.Log4Net/README.md#nanologginglog4net)**. +> 📖 Learn more about **[Nano.Logging.Log4Net](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging.Log4Net/README.md#nanologginglog4net)**. ## Registration The following logging has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Api.Logging.Microsoft/README.md b/Api.Logging.Microsoft/README.md index 525ba003..1b28b041 100644 --- a/Api.Logging.Microsoft/README.md +++ b/Api.Logging.Microsoft/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -18,7 +18,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This application demonstrates logging with Microsoft for a API application. Also note the `LogLevelOverrides` configuration, @@ -31,7 +31,7 @@ The following endpoint is available for testing: | `http://localhost:8080/api/examples/logging` | Returns a simple `200 OK` response. Won't log the `.LogDebug(...)` due to configuration `LogLevel=Information`. | | `http://localhost:8080/api/examples/logging-exception` | Returns a simple `500 Internal Server Error` response. The exception will be logged. | -> 📖 Learn more about **[Nano.Logging.Microsoft](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging.Microsoft/README.md#nanologgingmicrosoft)**. +> 📖 Learn more about **[Nano.Logging.Microsoft](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging.Microsoft/README.md#nanologgingmicrosoft)**. ## Registration The following logging has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Api.Logging.NLog/README.md b/Api.Logging.NLog/README.md index df4ac65b..ff4c36ab 100644 --- a/Api.Logging.NLog/README.md +++ b/Api.Logging.NLog/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -18,7 +18,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This application demonstrates logging with NLog for a API application. Also note the `LogLevelOverrides` configuration, @@ -31,7 +31,7 @@ The following endpoint is available for testing. | `http://localhost:8080/api/examples/logging` | Returns a simple `200 OK` response. Won't log the `.LogDebug(...)` due to configuration `LogLevel=Information`. | | `http://localhost:8080/api/examples/logging-exception` | Returns a simple `500 Internal Server Error` response. The exception will be logged. | -> 📖 Learn more about **[Nano.Logging.NLog](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging.NLog/README.md#nanologgingnlog)**. +> 📖 Learn more about **[Nano.Logging.NLog](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging.NLog/README.md#nanologgingnlog)**. ## Registration The following logging has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Api.Logging.Serilog/README.md b/Api.Logging.Serilog/README.md index e52dcf19..5bf01276 100644 --- a/Api.Logging.Serilog/README.md +++ b/Api.Logging.Serilog/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -18,7 +18,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This application demonstrates logging with Serilog for a API application. Also note the `LogLevelOverrides` configuration, @@ -31,7 +31,7 @@ The following endpoint is available for testing. | `http://localhost:8080/api/examples/logging` | Returns a simple `200 OK` response. Won't log the `.LogDebug(...)` due to configuration `LogLevel=Information`. | | `http://localhost:8080/api/examples/logging-exception` | Returns a simple `500 Internal Server Error` response. The exception will be logged. | -> 📖 Learn more about **[Nano.Logging.Serilog](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging.Serilog/README.md#nanologgingserilog)**. +> 📖 Learn more about **[Nano.Logging.Serilog](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging.Serilog/README.md#nanologgingserilog)**. ## Registration The following logging has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Api.Metrics/README.md b/Api.Metrics/README.md index 877aafa4..e2cea0b3 100644 --- a/Api.Metrics/README.md +++ b/Api.Metrics/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -19,7 +19,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [GitHub Actions](#github-actions) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)**. +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)**. This example demonstrates how OpenTelemetry can be configured to expose metrics through `/metrics`. Try it out. @@ -27,7 +27,7 @@ This example demonstrates how OpenTelemetry can be configured to expose metrics | ------------------------------------ | ------------------------------------------------ | | `http://localhost:8080/api/metrics` | Returns the current metrics for the application. | -> 📖 Learn more about **[Nano OpenTelemetry Metrics](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#opentelemetry-metrics)**. +> 📖 Learn more about **[Nano OpenTelemetry Metrics](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#opentelemetry-metrics)**. ## Configuration Added the empty `Metrics` section to enable OpenTelemetry with Prometheus for the application. diff --git a/Api.MultipartJson/README.md b/Api.MultipartJson/README.md index b4c35ee4..66b939e9 100644 --- a/Api.MultipartJson/README.md +++ b/Api.MultipartJson/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -16,7 +16,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This example simply shows uploading a file together with a JSON body. Observe the filename of the file is written to console, as well as the json body passed. @@ -27,4 +27,4 @@ The following endpoint is available for testing. | ---------------------------------------------------- | -------------------------------------- | | `http://localhost:8080/api/examples/multipart-json` | Returns a simple `200 OK` response. | -> 📖 Learn more about **[Nano Request Multipart JSON](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#request-multipart-json)**. +> 📖 Learn more about **[Nano Request Multipart JSON](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#request-multipart-json)**. diff --git a/Api.PolicyHeaders.ContentSecurityPolicy/README.md b/Api.PolicyHeaders.ContentSecurityPolicy/README.md index a8c3b1b0..5cbb37fd 100644 --- a/Api.PolicyHeaders.ContentSecurityPolicy/README.md +++ b/Api.PolicyHeaders.ContentSecurityPolicy/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Hosting.Https](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Hosting.Https)** and adds a simple test controller +This application builds on **[Api.Hosting.Https](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Hosting.Https)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. Content Security Policy (CSP) supports a wide range of configurations. This example demonstrates a small, representative subset of directives to illustrate @@ -35,7 +35,7 @@ To observe CSP violations in action, load the provided `csp-violation.html` file | ---------------------------------------- | --------------------------------------------------------------- | | `http://localhost:8080/api/examples/csp` | Returns a `200 OK` response including the CSP response header. | -> 📖 Learn more about **[Nano Content Security Options](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#content-type-options)**. +> 📖 Learn more about **[Nano Content Security Policy](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#content-security-policy-csp)**. ## Configuration Added content security policy header configuration. diff --git a/Api.PolicyHeaders.ContentTypeOptions/README.md b/Api.PolicyHeaders.ContentTypeOptions/README.md index 8e11728e..319b3ba6 100644 --- a/Api.PolicyHeaders.ContentTypeOptions/README.md +++ b/Api.PolicyHeaders.ContentTypeOptions/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. To observe content-type sniffing in action, load the `content-type-sniff-violation.html` file and see the browser block execution of the script @@ -27,7 +27,7 @@ served with an incorrect `.txt` content-type. | -------------------------------------------- | ---------------------------------------------------------------------------------- | | `http://localhost:8080/api/examples/nosniff` | Returns a `200 OK` response including the Content-Type `nosniff` response header. | -> 📖 Learn more about **[Nano Content Type Header](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#content-type-options)**. +> 📖 Learn more about **[Nano Content Type Header](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#content-type-options)**. ## Configuration ```json diff --git a/Api.PolicyHeaders.Cors/README.md b/Api.PolicyHeaders.Cors/README.md index fbff4206..689c361a 100644 --- a/Api.PolicyHeaders.Cors/README.md +++ b/Api.PolicyHeaders.Cors/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. To test CORS behavior, open the provided HTML pages and observe how the browser enforces different CORS restrictions and blocks unauthorized requests. @@ -28,7 +28,7 @@ Also try out the endpoint, and observe how CORS returns the allowed hosts, heade | ----------------------------------------- | ----------------------------------------------------------------- | | `http://localhost:8080/api/examples/cors` | Returns a `200 OK` response including the CORS response headers. | -> 📖 Learn more about **[Nano Cors](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#cors)**. +> 📖 Learn more about **[Nano Cors](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#cors)**. ## Configuration ```json diff --git a/Api.PolicyHeaders.ForwardedHeaders/README.md b/Api.PolicyHeaders.ForwardedHeaders/README.md index 6aaf0b8c..c32d9b9e 100644 --- a/Api.PolicyHeaders.ForwardedHeaders/README.md +++ b/Api.PolicyHeaders.ForwardedHeaders/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. Invoke the endpoint in the example controller to see the updated scheme, host, and remote IP address. The response also includes the original headers, @@ -27,7 +27,7 @@ which reflect the internal service values rather than the forwarded ones. The ex | -------------------------------------------- | ------------------------------------------------------------------------ | | `http://localhost:8080/api/examples/nosniff` | Returns a `200 OK` response with `HttpContext` forwarded header values. | -> 📖 Learn more about **[Nano Forwarded Headers](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#forwarded-headers)**. +> 📖 Learn more about **[Nano Forwarded Headers](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#forwarded-headers)**. ## Configuration ```json diff --git a/Api.PolicyHeaders.FrameOptions/README.md b/Api.PolicyHeaders.FrameOptions/README.md index af5298c6..6b214b1b 100644 --- a/Api.PolicyHeaders.FrameOptions/README.md +++ b/Api.PolicyHeaders.FrameOptions/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. To observe X-Frame-Options enforcement, load the `frame-options-violation.html` file and see the browser block the page from being embedded in an iframe. @@ -26,7 +26,7 @@ To observe X-Frame-Options enforcement, load the `frame-options-violation.html` | ------------------------------------------------- | ----------------------------------------------------------------------------- | | `http://localhost:8080/api/examples/frameoptions` | Returns a `200 OK` response including the `X-Frame-Options` response header. | -> 📖 Learn more about **[Nano Frame Options Header](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#frame-options)**. +> 📖 Learn more about **[Nano Frame Options Header](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#frame-options)**. ## Configuration ```json diff --git a/Api.PolicyHeaders.Hsts/README.md b/Api.PolicyHeaders.Hsts/README.md index 0863fd81..50e7c518 100644 --- a/Api.PolicyHeaders.Hsts/README.md +++ b/Api.PolicyHeaders.Hsts/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Hosting.Https](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api.Hosting.Https)** and adds a simple test controller +This application builds on **[Api.Hosting.Https](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api.Hosting.Https)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. The service is configured to run over HTTPS, since HSTS requires a secure connection to be tested effectively. @@ -27,7 +27,7 @@ To observe HSTS enforcement in action, load the `hsts-violation.html` file and s | ----------------------------------------- | --------------------------------------------------------------------------------------- | | `http://localhost:8080/api/examples/hsts` | Returns a `200 OK` response including the `Strict-Transform-Security` response header. | -> 📖 Learn more about **[Nano Strict Transport Security (HSTS)](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#strict-transport-security-hsts)**. +> 📖 Learn more about **[Nano Strict Transport Security (HSTS)](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#strict-transport-security-hsts)**. ## Configuration ```json diff --git a/Api.PolicyHeaders.ReferrerPolicy/README.md b/Api.PolicyHeaders.ReferrerPolicy/README.md index 2418a357..de562900 100644 --- a/Api.PolicyHeaders.ReferrerPolicy/README.md +++ b/Api.PolicyHeaders.ReferrerPolicy/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. To observe referrer policy behavior in action, load the `referrer-policy-violation.html` file and inspect how the browser handles (or blocks) the referrer @@ -27,7 +27,7 @@ in the resulting request. | ---------------------------------------------------- | -------------------------------------------------------------------------------------------------- | | `http://localhost:8080/api/examples/referrer-policy` | Returns a `200 OK` response including the `Referrer-Policy` response header set to `same-origin`. | -> 📖 Learn more about **[Nano Referrer Policy Header](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#referrer-policy)**. +> 📖 Learn more about **[Nano Referrer Policy Header](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#referrer-policy)**. ## Configuration ```json diff --git a/Api.PolicyHeaders.Robots/README.md b/Api.PolicyHeaders.Robots/README.md index db3d38e3..7cbdf248 100644 --- a/Api.PolicyHeaders.Robots/README.md +++ b/Api.PolicyHeaders.Robots/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This example shows the `X-Robots-Tag` header being set. @@ -28,7 +28,7 @@ The following endpoint is available for testing. | -------------------------------------------- | -------------------------------------------------------------------------- | | `http://localhost:8080/api/examples/nosniff` | Returns a `200 OK` response including the `X-Robots-Tag` response header. | -> 📖 Learn more about **[Nano Content Type Header](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#robots)**. +> 📖 Learn more about **[Nano Content Type Header](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#robots)**. ## Configuration ```json diff --git a/Api.PolicyHeaders.XssProtection/README.md b/Api.PolicyHeaders.XssProtection/README.md index 4070cb9f..4140c31b 100644 --- a/Api.PolicyHeaders.XssProtection/README.md +++ b/Api.PolicyHeaders.XssProtection/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. Run the endpoint to inspect the `X-XSS-Protection` header in the response. Then load the provided HTML page to observe that the `alert` is blocked by the browser. @@ -35,7 +35,7 @@ The following endpoint is available for testing. | ---------------------------------------- | ------------------------------------------------------------------------------ | | `http://localhost:8080/api/examples/xss` | Returns a `200 OK` response including the `X-XSS-Protection` response header. | -> 📖 Learn more about **[Nano Xxs Protection Header](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#xxs-protection)**. +> 📖 Learn more about **[Nano Xxs Protection Header](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#xss-protection)**. ## Configuration ```json diff --git a/Api.RequestTracing/README.md b/Api.RequestTracing/README.md index 60eb9dd7..770992c1 100644 --- a/Api.RequestTracing/README.md +++ b/Api.RequestTracing/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -16,7 +16,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. Try passing the `X-Request-Id` request header and observe that Nano uses it and returns the same value in the response. @@ -28,4 +28,4 @@ The following endpoint is available for testing. | ----------------------------------------------------- | -------------------------------------- | | `http://localhost:8080/api/examples/request-tracing` | Returns a simple `200 OK` response. | -> 📖 Learn more about **[Nano Request Tracing](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#request-tracing)**. +> 📖 Learn more about **[Nano Request Tracing](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#request-tracing)**. diff --git a/Api.ResponseCache/README.md b/Api.ResponseCache/README.md index 9f7cecfe..1b8d14c8 100644 --- a/Api.ResponseCache/README.md +++ b/Api.ResponseCache/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This example demonstrates using response caching with a Nano application. @@ -29,7 +29,7 @@ The following endpoint is available for testing. | `http://localhost:8080/api/examples/response-cache` | Returns a `200 OK` response cached. Header: `Cache-Control=public, max-age=1200` | | `http://localhost:8080/api/examples/no-response-cache` | Returns a `200 OK` response with no cache using Header: `[ResponseCache]`. `Cache-Control=no-store,no-cache` | -> 📖 Learn more about **[Nano Response Cache](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#response-cache)**. +> 📖 Learn more about **[Nano Response Cache](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#response-cache)**. ## Configuration ```json diff --git a/Api.ResponseCompression/README.md b/Api.ResponseCompression/README.md index fa87296c..1e1accbd 100644 --- a/Api.ResponseCompression/README.md +++ b/Api.ResponseCompression/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. When the endpoint is invoked with the Accept-Encoding header set to gzip, deflate, br, the response will be compressed. @@ -29,7 +29,7 @@ The following endpoint is available for testing. | --------------------------------------------------------- | ------------------------------------------------------------------------------------------- | | `http://localhost:8080/api/examples/response-compression` | Returns a `200 OK` response. Headers: `Content-Encoding: gzip` and `Vary: Accept-Encoding` | -> 📖 Learn more about **[Nano Response Compression](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#response-compression)**. +> 📖 Learn more about **[Nano Response Compression](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#response-compression)**. ## Configuration ```json diff --git a/Api.Session/README.md b/Api.Session/README.md index bb7269a1..8c59933a 100644 --- a/Api.Session/README.md +++ b/Api.Session/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This example demonstrates using session with a Nano application. @@ -30,7 +30,7 @@ The following endpoints is available for testing. | `http://localhost:8080/api/examples/get-session` | Gets the session variable if set and returns a `200 OK`. | | `http://localhost:8080/api/examples/clear-session` | Clear the session and returns a `200 OK`. | -> 📖 Learn more about **[Nano Session](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#session)**. +> 📖 Learn more about **[Nano Session](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#session)**. ## Configuration ```json diff --git a/Api.StartupTasks/README.md b/Api.StartupTasks/README.md index ed826734..25f95ce3 100644 --- a/Api.StartupTasks/README.md +++ b/Api.StartupTasks/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. After approximately 20 seconds, the startup task will complete, and the health check endpoint will report a status of `Healthy`. @@ -28,7 +28,7 @@ The following endpoint is available for testing. | --------------------------------------------------- | -------------------------------------- | | `http://localhost:8080/api/examples/startup-tasks` | Returns a simple `200 OK` response. | -> 📖 Learn more about **[Nano Startup Tasks](https://github.com/Nano-Core/tree/master/Nano.Library/Nano.App#startup-tasks)**. +> 📖 Learn more about **[Nano Startup Tasks](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App#start-up-tasks)**. ## Configuration There is no configuration required for startup tasks themselves. diff --git a/Api.StaticFiles/README.md b/Api.StaticFiles/README.md index aec8ceff..3765fcaf 100644 --- a/Api.StaticFiles/README.md +++ b/Api.StaticFiles/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -16,7 +16,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. Static files have been added to the solution, including a font, an image, and an HTML file. @@ -28,4 +28,4 @@ The following endpoint is available for testing: | -------------------------------------------------- | -------------------------------------- | | `http://localhost:8080/api/examples/static-files` | Returns a simple `200 OK` response. | -> 📖 Learn more about **[Nano Static Files](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#static-files)**. +> 📖 Learn more about **[Nano Static Files](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#static-files)**. diff --git a/Api.Storage.Azure/README.md b/Api.Storage.Azure/README.md index d1489d0a..0e3cdc96 100644 --- a/Api.Storage.Azure/README.md +++ b/Api.Storage.Azure/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -21,7 +21,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [GitHub Actions](#github-actions) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This application demonstrates uploading a file and saving it to a mapped file share. @@ -35,7 +35,7 @@ from the configuration, the application will still run, but the health-check wil Open [http://localhost:8080/healthz](http://localhost:8080/healthz) to view the storage health-check JSON response. -> 📖 Learn more about **[Nano Health Checks](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#health-checks)**. +> 📖 Learn more about **[Nano Health Checks](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#health-checks)**. The following endpoint is available for testing. @@ -43,7 +43,7 @@ The following endpoint is available for testing. | --------------------------------------------------- | ------------------------------------------------------------------------------- | | `http://localhost:8080/api/examples/storage` | Returns a simple `200 OK` response. Saves the uploaded file to the fileshare. | -> 📖 Learn more about **[Nano.Storage.Azure](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Storage.Azure/README#nanostorageazure)**. +> 📖 Learn more about **[Nano.Storage.Azure](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Storage.Azure/README.md#nanostorageazure)**. ## Registration The following storage provider has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Api.Storage.Local/README.md b/Api.Storage.Local/README.md index 6156afb4..0399c4bb 100644 --- a/Api.Storage.Local/README.md +++ b/Api.Storage.Local/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -21,7 +21,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [GitHub Actions](#github-actions) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This application demonstrates uploading a file and saving it to a locally mapped fileshare. @@ -36,7 +36,7 @@ The following endpoint is available for testing: | --------------------------------------------- | ------------------------------------------------------------------------------- | | `http://localhost:8080/api/examples/storage` | Returns a simple `200 OK` response. Saves the uploaded file to the fileshare. | -> 📖 Learn more about **[Nano.Storage.Local](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Storage.Local/README#nanostoragelocal)**. +> 📖 Learn more about **[Nano.Storage.Local](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Storage.Local/README.md#nanostoragelocal)**. ## Registration The following storage has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Api.TimeZone/README.md b/Api.TimeZone/README.md index 70e6d283..a77efdb6 100644 --- a/Api.TimeZone/README.md +++ b/Api.TimeZone/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -17,7 +17,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. The example demonstrates using request time zone in a Nano application. @@ -40,7 +40,7 @@ The following endpoint is available for testing. | ----------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- | | `http://localhost:8080/api/examples/timezone` (GET,POST) | Returns a `200 OK` response with various `DateTimeOffset` properties illustrating the date-time timezone conversions. | -> 📖 Learn more about **[Nano TimeZone](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#timezone)**. +> 📖 Learn more about **[Nano TimeZone](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#timezone)**. ## Configuration ```json diff --git a/Api.Versioning/README.md b/Api.Versioning/README.md index 82f8fd69..7ed3c689 100644 --- a/Api.Versioning/README.md +++ b/Api.Versioning/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -16,7 +16,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. The controller is annotated with `[ApiVersion("1.0")]` and `[ApiVersion("2.0")]`, and contains two actions, each mapped to a specific version @@ -32,4 +32,4 @@ The following endpoint is available for testing. | `http://localhost:8080/api/v1.0/examples/versioning` | Returns a `200 OK` response with the message `v1.0`. | | `http://localhost:8080/api/v2.0/examples/versioning` | Returns a `200 OK` response with the message `v2.0`. | -> 📖 Learn more about **[Nano Versioning](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#versioning)**. +> 📖 Learn more about **[Nano Versioning](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#versioning)**. diff --git a/Api.VirusScan/README.md b/Api.VirusScan/README.md index 520b6ee9..b359c2a9 100644 --- a/Api.VirusScan/README.md +++ b/Api.VirusScan/README.md @@ -8,7 +8,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected > ⚠️ Remember to set the docker-compose project as startup project, before running the solution in Visual Studio. -> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-lessons)**. +> 💡 Explore API requests for this lesson in our **[Public Nano Workspace on Postman](https://www.postman.com/nanocore/nano-core/collection/g2z9po5/nano-lessons)**. *** @@ -18,7 +18,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Docker-compose](#docker-compose) ## Summary -This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Api._Blank)** and adds a simple test controller +This application builds on **[Api.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Api._Blank)** and adds a simple test controller that inherits from the top-level Nano `BaseController`. This example demonstrates using virus scan for all uploaded files in a Nano application. @@ -26,7 +26,7 @@ This example demonstrates using virus scan for all uploaded files in a Nano appl An virus scan health check is configured. Open **[http://localhost:8080/healthz](http://localhost:8080/healthz)** to view the health-check status in the JSON response. -> 📖 Learn more about **[Nano Health Checks](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#health-checks)** +> 📖 Learn more about **[Nano Health Checks](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#health-checks)** Invoke the endpoint. To test virus detection, you can use the EICAR test files available here: [https://www.eicar.org/download-anti-malware-testfile](https://www.eicar.org/download-anti-malware-testfile). @@ -37,7 +37,7 @@ The following endpoint is available for testing. | ----------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ | | `http://localhost:8080/api/examples/virus-scan` | Returns a `200 OK` response if there is no virus in the file, and otherwise a `500 ERROR` with the found virus name in the error message. | -> 📖 Learn more about **[Nano Virus Scan](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#virus-scan)**. +> 📖 Learn more about **[Nano Virus Scan](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#virus-scan)**. ## Configuration ```json diff --git a/Api._Blank/README.md b/Api._Blank/README.md index caafa49d..668a32bd 100644 --- a/Api._Blank/README.md +++ b/Api._Blank/README.md @@ -23,4 +23,4 @@ from which all other API lessons and examples are built. It is recommended to review this application first to understand how a Nano API application is generally structured and to become familiar with the purpose of the core building blocks used in the boilerplate. -> 📖 Learn more about **[Nano Solution Composition](https://github.com/Nano-Core/Nano.Library#solution-composition)**. +> 📖 Learn more about **[Nano API Applications](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Api/README.md#nanoappapi)**. diff --git a/Console.CustomConfigSection/README.md b/Console.CustomConfigSection/README.md index f1f29df6..3b49822c 100644 --- a/Console.CustomConfigSection/README.md +++ b/Console.CustomConfigSection/README.md @@ -16,14 +16,14 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Registration](#registration) ## Summary -This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console._Blank)**. +This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console._Blank)**. This application demonstrates a worker that uses a custom configuration section. Run the application to see services and hosted services being resolved, and observe the console output generated by the `ExampleWorker` and the injected `CustomOptions` implementation. -> 📖 Learn more about **[Nano Custom Configuration Sections](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Api/README.md#custom-configuration-section)**. +> 📖 Learn more about **[Nano Custom Configuration Sections](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#custom-configuration-section)**. ## Configuration A custom configuration section has been added to `appsettings.json`: diff --git a/Console.CustomService/README.md b/Console.CustomService/README.md index 4bc057a7..0e0265aa 100644 --- a/Console.CustomService/README.md +++ b/Console.CustomService/README.md @@ -15,14 +15,14 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Registration](#registration) ## Summary -This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console._Blank)**. +This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console._Blank)**. This application demonstrates a worker that use a custom service. Run the application to see services and hosted services being resolved, and observe the console output generated by the `ExampleWorker` and the injected `IExampleService` implementation. -> 📖 Learn more about **[Nano Custom Services](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App/README.md#custom-services)**. +> 📖 Learn more about **[Nano Custom Services](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#custom-services)**. ## Registration A custom service, `IExampleService` has been added and implemented. In `program.cs` the service is registered using `ConfigureService(...)` method as shown below diff --git a/Console.Data.InMemory/README.md b/Console.Data.InMemory/README.md index 5515d9ac..01dd5519 100644 --- a/Console.Data.InMemory/README.md +++ b/Console.Data.InMemory/README.md @@ -16,18 +16,18 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console._Blank)**. +This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console._Blank)**. This example demonstrates how various parts of Nano data work together. All data configuration and registration have been completed, and classes have been implemented -for the data parts, including **[Data Models](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-models)**, **[Data Mappings](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-mappings)**, -and the **[Data Context](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-context)**. +for the data parts, including **[Data Models](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-models)**, **[Data Mappings](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-mappings)**, +and the **[Data Context](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-context)**. Notice, that the `InMemoryProvider` doesn't require any implementation of `BaseDbContextFactory` and there is no need to add migrations. -The worker creates and retreives a `Example` entity using the Nano **[Data Repository](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#repositories)**. Run the +The worker creates and retreives a `Example` entity using the Nano **[Data Repository](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#repositories)**. Run the application and observe the console output generated by the `ExampleWorker`. -> 📖 Learn more about **[Nano.Data.InMemory](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.InMemory/README#nanodatainmemory)**. +> 📖 Learn more about **[Nano.Data.InMemory](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.InMemory/README.md#nanodatainmemory)**. ## Registration The following data provider has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Console.Data.MySql/README.md b/Console.Data.MySql/README.md index d19e08da..6f1b01ad 100644 --- a/Console.Data.MySql/README.md +++ b/Console.Data.MySql/README.md @@ -19,16 +19,16 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [GitHub Actions](#github-actions) ## Summary -This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console._Blank)**. +This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console._Blank)**. This example demonstrates how various parts of Nano data work together. All data configuration and registration have been completed, and classes have been implemented -for the data parts, including **[Data Models](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-models)**, **[Data Mappings](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-mappings)**, -and the **[Data Context](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-context)**. +for the data parts, including **[Data Models](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-models)**, **[Data Mappings](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-mappings)**, +and the **[Data Context](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-context)**. -The worker creates and retreives a `Example` entity using the Nano **[Data Repository](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#repositories)**. Run the +The worker creates and retreives a `Example` entity using the Nano **[Data Repository](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#repositories)**. Run the application and observe the console output generated by the `ExampleWorker`. -> 📖 Learn more about **[Nano.Data.MySql](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.MySql/README.md#nanodatamysql)**. +> 📖 Learn more about **[Nano.Data.MySql](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.MySql/README.md#nanodatamysql)**. ## Registration The following data provider has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Console.Data.PostgreSQL/README.md b/Console.Data.PostgreSQL/README.md index 963e46ba..3bca1759 100644 --- a/Console.Data.PostgreSQL/README.md +++ b/Console.Data.PostgreSQL/README.md @@ -19,16 +19,16 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [GitHub Actions](#github-actions) ## Summary -This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console._Blank)**. +This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console._Blank)**. This example demonstrates how various parts of Nano data work together. All data configuration and registration have been completed, and classes have been implemented -for the data parts, including **[Data Models](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-models)**, **[Data Mappings](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-mappings)**, -and the **[Data Context](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-context)**. +for the data parts, including **[Data Models](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-models)**, **[Data Mappings](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-mappings)**, +and the **[Data Context](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-context)**. -The worker creates and retreives a `Example` entity using the Nano **[Data Repository](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#repositories)**. Run the +The worker creates and retreives a `Example` entity using the Nano **[Data Repository](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#repositories)**. Run the application and observe the console output generated by the `ExampleWorker`. -> 📖 Learn more about **[Nano.Data.PostgreSQL](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.PostgreSQL/README.md#nanodatamysql)**. +> 📖 Learn more about **[Nano.Data.PostgreSQL](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.PostgreSQL/README.md#nanodatapostgresql)**. ## Registration The following data provider has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Console.Data.SqLite/README.md b/Console.Data.SqLite/README.md index 69fd89ca..88147434 100644 --- a/Console.Data.SqLite/README.md +++ b/Console.Data.SqLite/README.md @@ -19,16 +19,16 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [GitHub Actions](#github-actions) ## Summary -This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console._Blank)**. +This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console._Blank)**. This example demonstrates how various parts of Nano data work together. All data configuration and registration have been completed, and classes have been implemented -for the data parts, including **[Data Models](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-models)**, **[Data Mappings](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-mappings)**, -and the **[Data Context](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-context)**. +for the data parts, including **[Data Models](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-models)**, **[Data Mappings](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-mappings)**, +and the **[Data Context](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-context)**. -The worker creates and retreives a `Example` entity using the Nano **[Data Repository](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#repositories)**. Run the +The worker creates and retreives a `Example` entity using the Nano **[Data Repository](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#repositories)**. Run the application and observe the console output generated by the `ExampleWorker`. -> 📖 Learn more about **[Nano.Data.SqLite](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.SqLite/README.md#nanodatamysql)**. +> 📖 Learn more about **[Nano.Data.SqLite](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.SqLite/README.md#nanodatasqlite)**. ## Registration The following data provider has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Console.Data.SqlServer/README.md b/Console.Data.SqlServer/README.md index cb9b51ec..d5b391da 100644 --- a/Console.Data.SqlServer/README.md +++ b/Console.Data.SqlServer/README.md @@ -18,16 +18,16 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [GitHub Actions](#github-actions) ## Summary -This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console._Blank)**. +This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console._Blank)**. This example demonstrates how various parts of Nano data work together. All data configuration and registration have been completed, and classes have been implemented -for the data parts, including **[Data Models](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-models)**, **[Data Mappings](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-mappings)**, -and the **[Data Context](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#data-context)**. +for the data parts, including **[Data Models](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-models)**, **[Data Mappings](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-mappings)**, +and the **[Data Context](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#data-context)**. -The worker creates and retreives a `Example` entity using the Nano **[Data Repository](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data/README.md#repositories)**. Run the +The worker creates and retreives a `Example` entity using the Nano **[Data Repository](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data/README.md#repositories)**. Run the application and observe the console output generated by the `ExampleWorker`. -> 📖 Learn more about **[Nano.Data.SqlServer](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Data.SqlServer/README.md#nanodatamysql)**. +> 📖 Learn more about **[Nano.Data.SqlServer](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Data.SqlServer/README.md#nanodatasqlserver)**. ## Registration The following data provider has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Console.Eventing.RabbitMq/README.md b/Console.Eventing.RabbitMq/README.md index 3a8fd651..f46e3815 100644 --- a/Console.Eventing.RabbitMq/README.md +++ b/Console.Eventing.RabbitMq/README.md @@ -18,7 +18,7 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Kubernetes](#kubernetes) ## Summary -This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console._Blank)**. +This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console._Blank)**. Although event handling is not typically associated with console applications, there are valid scenarios where event-driven architecture makes sense in a console worker. For example, a worker might retrieve data from a database or an API client and publish events for distributed processing across services. @@ -31,7 +31,7 @@ This message is written by the `EventHandler` when the event is successfully rec You can access the RabbitMQ management interface here: **[http://localhost:15672](http://localhost:15672)**. From there, you can monitor the messages being published and consumed in real time. -> 📖 Learn more about **[Nano.Eventing.RabbitMq](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Eventing.RabbitMq/README.md#nanoeventingrabbitmq)**. +> 📖 Learn more about **[Nano.Eventing.RabbitMq](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Eventing.RabbitMq/README.md#nanoeventingrabbitmq)**. ## Registration The following eventing provider has been registered using `ConfigureServices(...)` in `Program.cs`. @@ -134,4 +134,4 @@ spec: key: password ``` -> ⚠️ The `rabbitmq` secret is created alongside the **[Nano Azure Kubernetes Eventing](https://github.com/Nano-Core/Nano.Azure.Kubernetes/tree/master/Nano.Azure.Kubernetes.RabbitMQ)** +> ⚠️ The `rabbitmq` secret is created alongside the **[Nano Azure Kubernetes Eventing](https://github.com/Nano-Core/Nano.Azure.Kubernetes/blob/master/Nano.Azure.Kubernetes.RabbitMQ)** diff --git a/Console.ExceptionHandling/README.md b/Console.ExceptionHandling/README.md index bff2a21a..fda6ffe8 100644 --- a/Console.ExceptionHandling/README.md +++ b/Console.ExceptionHandling/README.md @@ -14,10 +14,10 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console._Blank)**. +This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console._Blank)**. This application demonstrates exception handling for a console application. Run the application and observe the `Exception` being thrown in the worker `OnStartAsync()`. -> 📖 Learn more about **[Nano Exception Handling](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Console/README.md#exception-handling)**. +> 📖 Learn more about **[Nano Exception Handling](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Console/README.md#exception-handling)**. diff --git a/Console.Localization/README.md b/Console.Localization/README.md index 676793bd..95b2cba4 100644 --- a/Console.Localization/README.md +++ b/Console.Localization/README.md @@ -14,13 +14,13 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console._Blank)**. +This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console._Blank)**. This application demonstrates configuring `Localization` in a Nano console application. Run the application and observe how the configured localization is used when printing out `DateTimeOffset.Now`. -> 📖 Learn more about **[Nano Console Localization](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Console/README.md#localization)**. +> 📖 Learn more about **[Nano Console Localization](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Console/README.md#localization)**. ## Configuration ```json diff --git a/Console.Logging.Log4Net/README.md b/Console.Logging.Log4Net/README.md index 908b42a8..0150ab39 100644 --- a/Console.Logging.Log4Net/README.md +++ b/Console.Logging.Log4Net/README.md @@ -16,14 +16,14 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console._Blank)**. +This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console._Blank)**. This application demonstrates logging with Log4Net for a console application. Run the application and observe how `ExampleWorker` logs a warning to the console. Also note the `LogLevelOverrides` configuration, where logs under the `Microsoft` namespace are set to `Warning`, which suppresses several informational messages during application startup. -> 📖 Learn more about **[Nano.Logging.Log4Net](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging.Log4Net/README.md#nanologginglog4net)**. +> 📖 Learn more about **[Nano.Logging.Log4Net](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging.Log4Net/README.md#nanologginglog4net)**. ## Registration The following logging has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Console.Logging.Microsoft/README.md b/Console.Logging.Microsoft/README.md index c110bd22..2a319c73 100644 --- a/Console.Logging.Microsoft/README.md +++ b/Console.Logging.Microsoft/README.md @@ -16,14 +16,14 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console._Blank)**. +This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console._Blank)**. This application demonstrates logging with Microsoft for a console application. Run the application and observe how `ExampleWorker` logs a warning to the console. Also note the `LogLevelOverrides` configuration, where logs under the `Microsoft` namespace are set to `Warning`, which suppresses several informational messages during application startup. -> 📖 Learn more about **[Nano.Logging.Microsoft](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging.Microsoft/README.md#nanologgingmicrosoft)**. +> 📖 Learn more about **[Nano.Logging.Microsoft](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging.Microsoft/README.md#nanologgingmicrosoft)**. ## Registration The following logging has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Console.Logging.NLog/README.md b/Console.Logging.NLog/README.md index f5724807..9db08a3a 100644 --- a/Console.Logging.NLog/README.md +++ b/Console.Logging.NLog/README.md @@ -16,14 +16,14 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console._Blank)**. +This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console._Blank)**. This application demonstrates logging with NLog for a console application. Run the application and observe how `ExampleWorker` logs a warning to the console. Also note the `LogLevelOverrides` configuration, where logs under the `Microsoft` namespace are set to `Warning`, which suppresses several informational messages during application startup. -> 📖 Learn more about **[Nano.Logging.NLog](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging.NLog/README.md#nanologgingnlog)**. +> 📖 Learn more about **[Nano.Logging.NLog](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging.NLog/README.md#nanologgingnlog)**. ## Registration The following logging has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Console.Logging.Serilog/README.md b/Console.Logging.Serilog/README.md index df5621de..971f9c79 100644 --- a/Console.Logging.Serilog/README.md +++ b/Console.Logging.Serilog/README.md @@ -16,14 +16,14 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Configuration](#configuration) ## Summary -This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console._Blank)**. +This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console._Blank)**. This application demonstrates logging with Serilog for a console application. Run the application and observe how `ExampleWorker` logs a warning to the console. Also note the `LogLevelOverrides` configuration, where logs under the `Microsoft` namespace are set to `Warning`, which suppresses several informational messages during application startup. -> 📖 Learn more about **[Nano.Logging.Serilog](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Logging.Serilog/README.md#nanologgingserilog)**. +> 📖 Learn more about **[Nano.Logging.Serilog](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Logging.Serilog/README.md#nanologgingserilog)**. ## Registration The following logging has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Console.StartupTasks/README.md b/Console.StartupTasks/README.md index 8277099a..6241ddb2 100644 --- a/Console.StartupTasks/README.md +++ b/Console.StartupTasks/README.md @@ -14,11 +14,11 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console._Blank)**. +This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console._Blank)**. This application demonstrates a waiting worker that delays its execution until all registered startup tasks have completed, ensuring that the console application only runs after initialization is finished. Run the application and observe how both example workers wait for the startup tasks to complete before executing their logic. -> 📖 Learn more about **[Nano Startup Tasks](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App/README.md#startup-tasks)**. +> 📖 Learn more about **[Nano Startup Tasks](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App/README.md#start-up-tasks)**. diff --git a/Console.Storage.Azure/README.md b/Console.Storage.Azure/README.md index b3bfe794..2bb50080 100644 --- a/Console.Storage.Azure/README.md +++ b/Console.Storage.Azure/README.md @@ -19,13 +19,13 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [GitHub Actions](#github-actions) ## Summary -This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console._Blank)**. +This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console._Blank)**. This application demonstrates creating a file and saving it to a mapped file share. When running locally, files are **NOT** written to the Azure File Share. Instead, Docker mounts a local directory to simulate the file share. Files are saved in `.docker/bin/`. -> 📖 Learn more about **[Nano.Storage.Azure](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Storage.Azure/README#nanostorageazure)**. +> 📖 Learn more about **[Nano.Storage.Azure](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Storage.Azure/README.md#nanostorageazure)**. ## Registration The following storage has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Console.Storage.Local/README.md b/Console.Storage.Local/README.md index 4e93cfd3..a4269613 100644 --- a/Console.Storage.Local/README.md +++ b/Console.Storage.Local/README.md @@ -19,12 +19,12 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [GitHub Actions](#github-actions) ## Summary -This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console._Blank)**. +This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console._Blank)**. This application demonstrates creating a file and saving it to a locally mapped file-share. Files are saved in `.docker/bin/`. -> 📖 Learn more about **[Nano.Storage.Local](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.Storage.Local/README#nanostoragelocal)**. +> 📖 Learn more about **[Nano.Storage.Local](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.Storage.Local/README.md#nanostoragelocal)**. ## Registration The following storage has been registered using `ConfigureServices(...)` in `program.cs`. diff --git a/Console.Workers/README.md b/Console.Workers/README.md index 6f891e3c..83d81ff6 100644 --- a/Console.Workers/README.md +++ b/Console.Workers/README.md @@ -14,10 +14,10 @@ Nano is referenced directly from source (not via NuGet packages) and is expected * [Summary](#summary) ## Summary -This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/tree/master/Console._Blank)**. +This application builds on **[Console.Blank](https://github.com/Nano-Core/Nano.Lessons/blob/master/Console._Blank)**. This application demonstrates multiple workers for a console application. Run the application and observe how both implemented workers execute, and see the console output generated by the `ExampleWorker` and `AnotherExampleWorker`. -> 📖 Learn more about **[Nano Console Workers](https://github.com/Nano-Core/Nano.Library/tree/master/Nano.App.Console/README.md#console-workers)**. +> 📖 Learn more about **[Nano Console Workers](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Console/README.md#console-workers)**. diff --git a/Console._Blank/README.md b/Console._Blank/README.md index 79f9bd9b..2f9670e0 100644 --- a/Console._Blank/README.md +++ b/Console._Blank/README.md @@ -23,4 +23,4 @@ are built. It is recommended to review this application first to understand how a Nano Console application is generally structured and to become familiar with the purpose of the core building blocks used in the boilerplate. -> 📖 Learn more about **[Nano Solution Composition](https://github.com/Nano-Core/Nano.Library#solution-composition)**. +> 📖 Learn more about **[Nano Console Applications](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Console/README.md#nanoappconsole)**. diff --git a/Web._Blank/README.md b/Web._Blank/README.md index f5864695..b733874d 100644 --- a/Web._Blank/README.md +++ b/Web._Blank/README.md @@ -25,4 +25,4 @@ An `App.razor` has been added to show simple use of `IComponent` when registerin It is recommended to review this application first to understand how a Nano Web application is generally structured and to become familiar with the purpose of the core building blocks used in the boilerplate. -> 📖 Learn more about **[Nano Solution Composition](https://github.com/Nano-Core/Nano.Library#solution-composition)**. +> 📖 Learn more about **[Nano Web Applications](https://github.com/Nano-Core/Nano.Library/blob/master/Nano.App.Web/README.md#nanoappweb)**.