# weather **Repository Path**: tutu071/weather ## Basic Information - **Project Name**: weather - **Description**: WeatherApp 是一个基于 .NET Core 9.0 的天气查询 Web API 应用,已成功集成 SQLite 本地数据库,提供完整的天气查询、数据存储和用户管理功能。 - **Primary Language**: C# - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2026-01-07 - **Last Updated**: 2026-01-28 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 天气查询应用 (WeatherApp) ## 项目概述 这是一个基于 .NET Core 9.0 的天气查询 Web API 应用,使用 SQLite 本地数据库存储天气数据、用户设置、搜索历史和收藏城市。 ## 技术栈 - **后端框架**: .NET Core 9.0 Web API - **数据库**: SQLite (本地文件数据库) - **ORM**: Entity Framework Core - **缓存**: 内存缓存 (IMemoryCache) - **API文档**: Swagger/OpenAPI - **前端**: 简单的 HTML/CSS/JavaScript 页面 ## 项目结构 ``` WeatherApp/ ├── Controllers/ # API控制器 │ ├── WeatherController.cs # 天气相关API │ └── UserSettingsController.cs # 用户设置API ├── Models/ # 数据模型 │ ├── WeatherModels.cs # 天气数据模型 │ └── WeatherDbContext.cs # EF Core数据库上下文 ├── Services/ # 业务服务层 │ ├── IWeatherService.cs # 天气服务接口 │ ├── WeatherService.cs # 天气服务实现 │ ├── IDataService.cs # 数据服务接口 │ └── DataService.cs # 数据服务实现 ├── wwwroot/ # 静态文件 │ └── index.html # 前端页面 ├── Program.cs # 应用程序入口 ├── appsettings.json # 配置文件 └── WeatherApp.db # SQLite数据库文件 ``` ## 数据库设计 ### SQLite 数据库表结构 #### 1. WeatherRecords (天气记录表) ```sql CREATE TABLE "WeatherRecords" ( "Id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "City" TEXT NOT NULL, -- 城市名称 "Weather" TEXT NOT NULL, -- 天气状况 "Temperature" TEXT NOT NULL, -- 温度 "Humidity" TEXT NOT NULL, -- 湿度 "WindDirection" TEXT NOT NULL, -- 风向 "WindPower" TEXT NOT NULL, -- 风力 "AirQuality" TEXT NOT NULL, -- 空气质量 "UvIndex" TEXT NOT NULL, -- 紫外线指数 "Visibility" TEXT NOT NULL, -- 能见度 "Pressure" TEXT NOT NULL, -- 气压 "FeelsLike" TEXT NOT NULL, -- 体感温度 "QueryTime" TEXT NOT NULL -- 查询时间 ); ``` #### 2. UserSettings (用户设置表) ```sql CREATE TABLE "UserSettings" ( "Id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "UserId" TEXT NOT NULL UNIQUE, -- 用户ID "TemperatureUnit" TEXT NOT NULL, -- 温度单位 (Celsius/Fahrenheit) "Language" TEXT NOT NULL, -- 语言设置 (zh-CN/en-US) "Theme" TEXT NOT NULL, -- 主题设置 (Light/Dark) "Notifications" INTEGER NOT NULL, -- 通知设置 (0/1) "FavoriteCities" TEXT NOT NULL, -- 收藏城市 (JSON格式) "SearchHistory" TEXT NOT NULL -- 搜索历史 (JSON格式) ); ``` #### 3. SearchHistories (搜索历史表) ```sql CREATE TABLE "SearchHistories" ( "Id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "UserId" TEXT NOT NULL, -- 用户ID "CityName" TEXT NOT NULL, -- 城市名称 "SearchTime" TEXT NOT NULL -- 搜索时间 ); ``` #### 4. FavoriteCities (收藏城市表) ```sql CREATE TABLE "FavoriteCities" ( "Id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, "UserId" TEXT NOT NULL, -- 用户ID "CityName" TEXT NOT NULL, -- 城市名称 "AddTime" TEXT NOT NULL -- 添加时间 ); ``` ## API 接口 ### 天气相关接口 #### 1. 获取当前天气 ``` GET /api/weather/current/{city} ``` **参数**: city - 城市名称 **返回**: 当前天气信息 #### 2. 获取天气预报 ``` GET /api/weather/forecast/{city} ``` **参数**: city - 城市名称 **返回**: 5天天气预报 #### 3. 获取生活指数 ``` GET /api/weather/life-index/{city} ``` **参数**: city - 城市名称 **返回**: 生活指数信息 #### 4. 搜索城市 ``` GET /api/weather/search-cities?keyword={keyword} ``` **参数**: keyword - 搜索关键词 **返回**: 匹配的城市列表 #### 5. 根据坐标获取城市 ``` GET /api/weather/city-by-location?latitude={lat}&longitude={lon} ``` **参数**: latitude, longitude - 经纬度 **返回**: 城市信息 #### 6. 获取完整天气信息 ``` GET /api/weather/complete/{city} ``` **参数**: city - 城市名称 **返回**: 当前天气 + 预报 + 生活指数 #### 7. 获取天气历史 ``` GET /api/weather/history/{city}?days={days} ``` **参数**: city - 城市名称, days - 天数(默认7天) **返回**: 历史天气记录 #### 8. 获取最近天气记录 ``` GET /api/weather/recent-records?count={count} ``` **参数**: count - 记录数量(默认10条) **返回**: 最近的天气记录 ### 用户设置接口 #### 1. 获取用户设置 ``` GET /api/usersettings/{userId} ``` #### 2. 更新用户设置 ``` PUT /api/usersettings/{userId} ``` #### 3. 添加收藏城市 ``` POST /api/usersettings/{userId}/favorites ``` #### 4. 移除收藏城市 ``` DELETE /api/usersettings/{userId}/favorites/{cityName} ``` #### 5. 添加搜索历史 ``` POST /api/usersettings/{userId}/history ``` #### 6. 清空搜索历史 ``` DELETE /api/usersettings/{userId}/history ``` #### 7. 获取收藏城市 ``` GET /api/usersettings/{userId}/favorites ``` #### 8. 获取搜索历史 ``` GET /api/usersettings/{userId}/history ``` ## 配置说明 ### appsettings.json ```json { "ConnectionStrings": { "DefaultConnection": "Data Source=WeatherApp.db" }, "WeatherApi": { "BaseUrl": "https://api.weatherapi.com/v1", "ApiKey": "", "CacheTimeout": { "CurrentWeather": "00:30:00", "Forecast": "01:00:00", "LifeIndex": "02:00:00", "CitySearch": "24:00:00" } } } ``` ## 运行说明 ### 1. 环境要求 - .NET Core 9.0 SDK - Visual Studio 2022 或 VS Code ### 2. 安装依赖 ```bash dotnet restore ``` ### 3. 运行应用 ```bash dotnet run ``` ### 4. 访问应用 - **API文档**: http://localhost:5091/swagger - **前端页面**: http://localhost:5091 - **健康检查**: http://localhost:5091/health - **API信息**: http://localhost:5091/api-info ## 数据库操作 ### 查看数据库文件 SQLite数据库文件位于项目根目录:`WeatherApp.db` ### 使用SQLite工具查看数据 可以使用以下工具查看数据库内容: - **DB Browser for SQLite**: 图形化工具 - **SQLite命令行工具** - **Visual Studio Code SQLite插件** ### 示例SQL查询 ```sql -- 查看所有天气记录 SELECT * FROM WeatherRecords ORDER BY QueryTime DESC LIMIT 10; -- 查看用户设置 SELECT * FROM UserSettings; -- 查看搜索历史 SELECT * FROM SearchHistories ORDER BY SearchTime DESC; -- 查看收藏城市 SELECT * FROM FavoriteCities; ``` ## 功能特性 ### 1. 天气查询 - 实时天气信息查询 - 5天天气预报 - 生活指数查询 - 城市搜索功能 - 坐标定位功能 ### 2. 数据存储 - 天气记录自动保存到SQLite数据库 - 用户设置持久化存储 - 搜索历史记录 - 收藏城市管理 ### 3. 缓存机制 - 内存缓存减少API调用 - 可配置的缓存超时时间 - 分层缓存策略 ### 4. 用户功能 - 个性化设置管理 - 收藏城市功能 - 搜索历史记录 - 多用户支持 ## 开发说明 ### 添加新的API接口 1. 在对应的Controller中添加新的Action方法 2. 在Service层实现业务逻辑 3. 在DataService中添加数据访问方法 4. 更新API文档 ### 数据库迁移 当修改数据模型时,需要创建新的迁移: ```bash dotnet ef migrations add MigrationName dotnet ef database update ``` ### 测试API 可以使用以下工具测试API: - **Swagger UI**: http://localhost:5091/swagger - **Postman**: 导入API文档 - **curl**: 命令行测试 ## 部署说明 ### 生产环境部署 1. 发布应用: ```bash dotnet publish -c Release ``` 2. 配置生产环境连接字符串 3. 设置环境变量 4. 配置反向代理(如Nginx) ### Docker部署 ```dockerfile FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS base WORKDIR /app EXPOSE 80 EXPOSE 443 FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build WORKDIR /src COPY ["WeatherApp.csproj", "./"] RUN dotnet restore "WeatherApp.csproj" COPY . . RUN dotnet build "WeatherApp.csproj" -c Release -o /app/build FROM build AS publish RUN dotnet publish "WeatherApp.csproj" -c Release -o /app/publish FROM base AS final WORKDIR /app COPY --from=publish /app/publish . ENTRYPOINT ["dotnet", "WeatherApp.dll"] ``` ## 故障排除 ### 常见问题 1. **数据库文件被锁定** - 确保没有其他进程正在使用数据库文件 - 重启应用程序 2. **API返回403错误** - 检查天气API密钥配置 - 应用会自动使用模拟数据 3. **端口被占用** - 修改launchSettings.json中的端口配置 - 或使用不同的端口启动 4. **数据库连接失败** - 检查连接字符串配置 - 确保有写入权限 ## 更新日志 ### v1.0.0 (当前版本) - 初始版本发布 - 支持SQLite本地数据库 - 完整的天气查询API - 用户设置管理 - 简单的前端界面 - Swagger API文档 ## 许可证 MIT License