A modern ASP.NET Core web application with Angular frontend, demonstrating file upload/download functionality and weather forecast data visualization.
This project is a full-stack web application built with:
- Backend: ASP.NET Core 9.0 (RESTful API)
- Frontend: Angular 19.1 (Standalone Components)
- UI Framework: Bootstrap 5.3
- TypeScript: 5.6
The application features:
- 📁 File Management: Upload, download, and delete files through a web interface
- 🌤️ Weather Forecast: Display sample weather data
- 🔢 Counter: Simple interactive counter component
- 📊 Data Fetching: Demonstrates API integration patterns
- .NET 9.0 SDK or later
- Node.js 18+ and npm
- A modern web browser
Important: This application requires the backend file management service to be running:
- Service Repository: FN.FileManagement
- The file upload/download features depend on this API service being available at the configured API base URL
The API base URL is configured in the Angular environment files:
- Development:
ClientApp/src/environments/environment.ts - Production:
ClientApp/src/environments/environment.prod.ts
Default configuration:
export const environment = {
production: false,
apiBaseUrl: 'https://localhost:44314/api/'
};Update the apiBaseUrl property to match your FN.FileManagement service deployment.
git clone https://github.com/mf-rl/FN.FileManagement.Web.git
cd FN.FileManagement.Webcd FN.FileManagement.Web/ClientApp
npm install
cd ../..Terminal 1 - Start Angular Dev Server:
cd FN.FileManagement.Web/ClientApp
npm startThe Angular app will be available at http://localhost:4200
Terminal 2 - Start .NET Backend:
cd FN.FileManagement.Web
dotnet runThe .NET backend will be available at:
- HTTPS: https://localhost:5001
- HTTP: http://localhost:5000
When both are running, navigate to https://localhost:5001 to access the full application through the .NET backend with SPA proxy.
cd FN.FileManagement.Web/ClientApp
npm run build
cd ..
dotnet runIf you see certificate warnings:
dotnet dev-certs https --trustFN.FileManagement.Web/
├── FN.FileManagement.Web/ # ASP.NET Core Backend
│ ├── Controllers/ # API Controllers
│ │ └── WeatherForecastController.cs
│ ├── Pages/ # Razor Pages
│ ├── Properties/ # Launch settings
│ ├── ClientApp/ # Angular Frontend
│ │ ├── src/
│ │ │ ├── app/
│ │ │ │ ├── counter/ # Counter component
│ │ │ │ ├── fetch-data/ # Weather forecast component
│ │ │ │ ├── file-uploads/ # File management component
│ │ │ │ ├── home/ # Home page component
│ │ │ │ └── nav-menu/ # Navigation component
│ │ │ ├── assets/ # Static assets
│ │ │ └── environments/ # Environment configs
│ │ ├── angular.json # Angular CLI configuration
│ │ ├── package.json # npm dependencies
│ │ └── tsconfig.json # TypeScript configuration
│ ├── Program.cs # Application entry point
│ └── FN.FileManagement.Web.csproj # Project file
└── README.md
- Upload files (JPG format supported)
- View uploaded files list with metadata
- Download files
- Delete files
- Progress tracking during upload
- Fetches weather data from the backend API
- Displays temperature in Celsius and Fahrenheit
- Shows weather summary
- Responsive navigation menu using Bootstrap
- Mobile-friendly hamburger menu
- ASP.NET Core 9.0
- C# with nullable reference types enabled
- Minimal API pattern
- SpaServices for Angular integration
- Angular 19.1 with standalone components
- TypeScript 5.6
- RxJS 7.8
- Bootstrap 5.3
- ng-bootstrap 18.0
- Angular CLI 19.1
- esbuild (via Angular CLI)
- Karma + Jasmine for testing
GET /weatherforecast- Returns weather forecast data
GET /api/Uploads- List uploaded filesPOST /api/Uploads- Upload a fileGET /api/Uploads/download/{id}- Download a fileDELETE /api/Uploads/{id}- Delete a file
- ⬆️ Upgraded from .NET 5.0 to .NET 9.0
- 🔄 Migrated from
Startup.cspattern to minimal API pattern inProgram.cs - ✨ Enabled implicit usings for cleaner code
- 🛡️ Enabled nullable reference types
- 📦 Updated
Microsoft.AspNetCore.SpaServices.Extensionsfrom 5.0.4 to 9.0.0 - 🔧 Fixed nullable reference warnings in models
- ⬆️ Upgraded Angular from 8.2.12 to 19.1.0 (11 major versions!)
- 🏗️ Migrated to standalone components architecture (removed NgModule)
- ⬆️ Upgraded TypeScript from 3.5.3 to 5.6.3
- 🎨 Updated Bootstrap from 4.6.0 to 5.3.3
- 📦 Updated @ng-bootstrap/ng-bootstrap from 9.0.1 to 18.0.0
- 📚 Updated RxJS from 6.6.3 to 7.8.1
- 🔄 Updated Zone.js from 0.9.1 to 0.15.0
- 🧪 Updated Karma from 5.2.3 to 6.4.4
- ✅ Updated Jasmine from 3.5.0 to 5.4.0
- 🔨 Migrated from
@angular-devkit/build-angular:browserto:applicationbuilder - 🗑️ Removed deprecated packages and files (tslint, protractor, etc.)
- ⚙️ Updated karma configuration to use karma-coverage instead of karma-coverage-istanbul-reporter
- ❌ Removed
app.module.tsandapp.server.module.ts(migrated to standalone) - ❌ Removed
tslint.json(tslint deprecated) - ❌ Removed
tsconfig.server.json(no longer needed) - ❌ Removed obsolete polyfills
- ❌ Removed jQuery dependency
- ❌ Removed Popper.js dependency
- ❌ Removed oidc-client dependency
- 📝 Updated
.gitignoreto exclude.vs/and.vscode/folders - ⚙️ Updated
angular.jsonfor new builder architecture - 📋 Updated
tsconfig.jsonwith modern compiler options - 🔧 Updated
karma.conf.jsfor latest testing tools
- Initial release with .NET 5.0 and Angular 8
- Basic file upload/download functionality
- Weather forecast demo
- Counter component
cd FN.FileManagement.Web/ClientApp
npm testcd FN.FileManagement.Web/ClientApp
npm run lintcd FN.FileManagement.Web/ClientApp
npm run build- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is for demonstration purposes.
- FN.FileManagement - Backend file management service (required dependency)