在 .NET Core 中构建一个根据邮政编码获取城市名称的服务

2025-06-07

在 .NET Core 中构建一个根据邮政编码获取城市名称的服务

我希望大家对我的内容提出诚实的反馈。请评论或在 Twitter 上联系我!

你见过那种根据邮政编码显示城市信息的下拉菜单吗?这是一个小巧却简洁的用户界面元素,可以方便地让用户输入表单更简洁、更快捷。

我们将构建什么

我们将构建一个应用程序,以邮政编码作为输入,并返回该邮政编码的城市信息,如下所示:

.NET Core 教程

它将是一个 .NET Core Web API 应用程序,可用于网页、移动设备等各种平台。它有点像微服务,但我不太喜欢这么叫。它是一个简单的RESTful应用程序。

入门所需

在本教程中,我使用的是 .NET Core 2.2。您需要从此处下载 .NET Core 安装程序。您可以使用文本编辑器和 CLI 轻松完成此项目,但在本教程中,我使用Visual Studio来展示它的易用性。

您还应该下载DB Browser以将数据导入 SQLite 数据库。

步骤1:创建一个新项目。

加载 Visual Studio 并创建一个新项目。

.NET Core 教程

选择“ASP.NET Core Web 应用程序”,然后点击“下一步”。项目名称可随意命名。

.NET Core 教程

接下来,您将看到如下所示的屏幕。选择“API”并点击“创建”。

.NET Core 教程

这将搭建一个新的 API 应用程序。我们要做的第一件事是删除“values”控制器。

然后,我们将安装一些工具,以便我们可以在此应用程序中使用 SQLite 和 Entity Framework Core:

在命令提示符或程序包管理器控制台中,运行以下命令:

dotnet add package Microsoft.EntityFrameworkCore.Sqlite
dotnet add package Microsoft.EntityFrameworkCore.Design
Enter fullscreen mode Exit fullscreen mode

这将添加 SQLite 支持和设计命名空间,其中有一些可以帮助我们的设计组件。

我们在这里使用 SQLite 的原因是,我们希望它成为一个无需服务器的独立数据库,并且能够在三个平台上运行。SQLite 可以很好地满足这一需求,至少对于像这样的小型数据库来说是如此。

不要忘记恢复项目:

dotnet restore
Enter fullscreen mode Exit fullscreen mode

注意:这里完全不需要 EF Core。直接访问或使用Dapper之类的工具可能会更快。但为了简单起见,我们使用 EF Core。

2.创建模型

接下来,创建一个名为 models 的文件夹,并创建一个新类。我们的类将如下所示:

public class City
{
    [Key]
    public string Zip { get; set; }
    public float Lat { get; set; }
    public float Lng { get; set; }
    public string CityName { get; set; }
    public string StateId { get; set; }
    public string StateName { get; set; }
    public string TimeZone { get; set; }
    public ICollection<City> Cities { get; set; }
}
Enter fullscreen mode Exit fullscreen mode

这个类代表“城市”,也就是我们要处理的数据类型。如你所见,它包含邮政编码,我们将在这里使用它作为 ID。它包含城市的经纬度、名称、州 ID(例如 OR)、州名和时区。

我们还将在此处添加一个“城市”集合,以返回城市集合。保存文件。

3. 定义上下文

接下来,我们将为这些城市可以居住的数据库创建一个上下文。在模型中创建一个如下所示的新类:

public class CityContext : DbContext
{
    public CityContext(DbContextOptions<CityContext> options) : base(options){ }

    public DbSet<City> Cities { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite(@"Data Source=Database/zipcodes.db"); // windows      
    }
}
Enter fullscreen mode Exit fullscreen mode

这是我们将用于 Entity Framework Core 的上下文,以便我们可以轻松地操作数据。

这里我们允许将选项注入到类中,并在配置时用 optionsbuilder 覆盖它。这里会指示上下文使用特定文件,在本例中是zipcodes.db。这将是包含我们城市信息的托管数据库。

接下来,打开startup.cs并将以下几行添加到顶部:

using Microsoft.EntityFrameworkCore;
using Zippy.Models;
Enter fullscreen mode Exit fullscreen mode

确保第二行是模型命名空间的路径(我的项目名为 Zippy)。

然后在Configureservices方法中,我们将再次添加对数据库的引用,并设置EF选项以使用SQLite。

    var connection = @"Data Source=Database\zipcodes.db";  // Windows
    services.AddDbContext<CityContext>(options => options.UseSqlite(connection));
Enter fullscreen mode Exit fullscreen mode

注意注释掉的地方,写着“Windows”。如果你想在 Linux 或 OSX 系统上运行这个程序,你需要把斜杠反过来,这样才能在文件系统中找到它:

    var connection = @"Data Source=Database/zipcodes.db";  // Linux
Enter fullscreen mode Exit fullscreen mode

现在让我们创建该数据库。

4.创建数据库

在项目中创建一个名为“数据库”的新文件夹。

打开数据库浏览器并创建一个新的数据库。

替代文本

创建一个文件名来保存它。目前您无需创建任何表格或执行任何其他操作。

5.创建迁移

我们的数据库中只有一个表,但我们想在 EF Core 中为其创建一个迁移。迁移对于跟踪数据库的历史更改以及在需要时恢复数据非常重要。注意,这里我仅讨论架构(布局)信息,而不是存储在其中的数据。

dotnet ef migrations add Initial
Enter fullscreen mode Exit fullscreen mode

现在我们已经完成了初始架构的设置。接下来更新 Entity Framework Core:

dotnet ef database update
Enter fullscreen mode Exit fullscreen mode

现在我们的数据库和表已经创建。

6.导入数据

这将使用来自Simple Maps的 CSV 数据进行填充。如果您打算将其用于网站,请务必提供指向其网站的链接,以表彰其贡献。

现在表格已创建完毕,我们将使用从“简单地图”下载的 CSV 文件中的数据填充表格。在本项目中,我删除了一些列,如下所示:

.NET Core 教程

正如Derek指出的那样,您需要在末尾添加一个空白字段,以便它与 EF 生成的表中的列相匹配。

现在可以导入了。

转到文件 -> 导入 -> 来自 CSV 文件的表格:

.NET Core 教程

加载你之前创建的 CSV 文件。它应该如下所示:

.NET Core 教程

然后导入文件。现在您应该有一个完整的数据库。

.NET Core 教程

保存数据库文件。确保将其设置为与项目一起复制。

.NET Core 教程

现在让我们让我们的应用程序与它进行交互。

7.创建控制器

现在我们需要创建一个城市控制器。这个过程相当简单,但 Visual Studio 让它变得更加简单。

右键单击控制器文件夹并选择添加->控制器

.NET Core 教程

我们希望使用实体框架选择一个具有操作的 API 控制器

.NET Core 教程

模型类选择City ,数据上下文类选择CityContext并生成。

Visual Studio 将自动生成一组操作来执行以下操作:

  • 获取数据库中的城市列表
  • 从邮政编码获取特定城市
  • 添加城市
  • 删除城市
  • 更新信息

.NET Core 教程

虽然这些功能构建起来相当简单,但最好能搭建好。为了使其成为一个可用的服务,您需要删除修改数据的操作,只保留 GET 功能。

8.设置默认路由

最后一步是设置默认路由。打开launchSettings.json 文件,修改标有“launchUrl”的两行:

改变

"launchUrl": "api/values",
Enter fullscreen mode Exit fullscreen mode


"launchUrl": "api/cities",
Enter fullscreen mode Exit fullscreen mode

保存文件并构建项目。按 F5 启动它。

成品

按下 F5 后,您将看到该项目出现在您的网络浏览器中。

.NET Core 教程

为了使此服务按预期工作,它必须将邮政编码作为输入,这可以通过将邮政编码附加到 URL 末尾轻松完成:

.NET Core 教程

当使用 POSTMan 之类的格式时,看起来会更好:

.NET Core 教程

您可以通过多种方式将此服务用于表单中的用户界面。这可以通过 JavaScript 应用程序或移动应用轻松调用。

结论

使用 .NET Core 创建简单的微服务和应用程序非常简单。它们可以快速组合,运行速度极快且精简。此外,它们可以在任何平台上运行。如果您想了解更多关于 .NET Core 的信息,可以查看这些精彩的课程,或访问微软的.NET Core 帮助网站

在未来的教程中,我将向您展示如何将此应用程序部署到多个服务器和云环境。

注意:此应用使用Simple Maps(免费版)的数据。如果您打算在自己的网站上使用此应用,请提供链接或考虑使用专业版,因为专业版的数据更准确、更新更快。

你的 .NET Core IQ 是多少?

我的 ASP.NET Core 技能智商是 200。还不错,你能超越吗?点击此处尝试

文章来源:https://dev.to/pluralsight/building-a-service-to-get-a-city-name-from-a-zip-code-in-net-core-3ld5
PREV
WSL 入门
NEXT
Сброс пароля, PIN-кода либо графической блокировки с помощью ADB