Skip to content

Repository files navigation

ABP.GeoServerRest

项目概览

基于 ABP Framework 8.x 的 GeoServer REST API 客户端模块,提供对 GeoServer REST API 的完整封装。项目采用分层架构设计,将契约定义、实现逻辑和 HTTP API 暴露分离到三个独立的类库项目中。

技术栈:

  • .NET 8.0 + C#
  • ABP Framework 8.3.4
  • ASP.NET Core MVC
  • System.Text.Json
  • IHttpClientFactory

目标: 为 GeoServer 的地图服务管理提供一个类型安全、可测试、可扩展的 .NET 客户端 SDK。

解决方案结构

ABP.GeoServerRest.slnx
├── ABP.GeoServerRest.HttpContracts   (契约层)
├── ABP.GeoServerRest.HttpClient      (实现层)
└── ABP.GeoServerRest.HttpApi         (API 暴露层)

项目依赖关系

HttpContracts  ←  HttpClient  ←  HttpApi
(抽象/模型)      (实现)          (MVC端点)
  • HttpContracts — 定义接口、DTO 模型、配置选项,不包含任何实现
  • HttpClient — 依赖 HttpContracts,实现所有业务服务接口和 HTTP 客户端
  • HttpApi — 依赖 HttpClient,通过 ASP.NET Core MVC 控制器暴露 REST 端点

模块说明

契约层 — 定义与 GeoServer REST API 交互所需的所有抽象。

子目录 说明
Configuration/ 客户端配置选项 GeoServerRestClientOptions(BaseUrl、Username、Password、TimeoutSeconds)
Http/ HTTP 客户端抽象接口 IGeoServerHttpClient + 自定义异常 GeoServerRequestException
Models/ 数据模型(DTO),覆盖 GeoServer 所有资源类型:Workspace、Layer、LayerGroup、Style、DataStore、Coverage、FeatureType、Security 等
Services/ 34 个业务服务接口,每个接口对应一类 GeoServer REST API 资源

关键接口:

实现层 — 基于 IHttpClientFactory 实现所有业务服务。

子目录 说明
Configuration/ 配置扩展方法 AddGeoServerRestClient
Http/ GeoServerHttpClientIGeoServerHttpClientIHttpClientFactory 实现
Localization/ 本地化资源(简体中文)
Services/ 34 个服务的具体实现,通过 Named HttpClient "GeoServerRestClient" 调用 GeoServer REST API

核心特性:

  • Named HttpClient 自动配置 Basic 认证
  • 统一的异常处理(GeoServerRequestException
  • 支持强类型反序列化(Workspace、Layer 等)和原始字符串返回
  • 方法均为 virtual,支持继承扩展

API 暴露层 — 通过 ASP.NET Core MVC 控制器暴露 GeoServer API 端点。

子目录 说明
Controllers/ MVC 控制器:API 规格查看 + 通用代理
Localization/ API 层本地化资源
Permissions/ 权限常量与定义提供者

API 端点:

路由 方法 权限 说明
/api/geoserver/spec GET Spec 获取 GeoServer REST API 规格文档
/api/geoserver/proxy/{**path} GET/POST/PUT/DELETE Proxy 通用代理,透传请求到 GeoServer

快速开始

1. 安装依赖

在应用层模块中添加对 ABP.GeoServerRest.HttpApi 的项目引用,或直接引用 ABP.GeoServerRest.HttpClient 后自行注册。

2. 配置客户端

// 在应用模块的 ConfigureServices 中
services.AddGeoServerRestClient(options =>
{
    options.BaseUrl = "http://localhost:8080/geoserver";
    options.Username = "admin";
    options.Password = "geoserver";
    options.TimeoutSeconds = 30;
});

3. 注入服务使用

public class MyService : ITransientDependency
{
    private readonly IWorkspaceService _workspaceService;

    public MyService(IWorkspaceService workspaceService)
    {
        _workspaceService = workspaceService;
    }

    public async Task ListWorkspacesAsync()
    {
        var workspaces = await _workspaceService.GetWorkspacesAsync();
        foreach (var ws in workspaces)
        {
            Console.WriteLine($"Workspace: {ws.Name}");
        }
    }
}

设计说明

三层架构

项目遵循 ABP 模块化设计的最佳实践:

  • HttpContracts 作为纯抽象层,可单独发布为 NuGet 包供其他项目引用接口定义
  • HttpClient 层使用 ITransientDependency 实现自动注册,无需手动配置 DI
  • HttpApi 层通过权限机制(Spec/Proxy)控制 API 访问

错误处理

所有 HTTP 请求失败时统一抛出 GeoServerRequestException,包含 HTTP 状态码和响应内容。

扩展性

  • 所有服务方法均为 virtual,支持通过继承重写
  • 支持通过 ABP 选项模式自定义 HttpClient 配置
  • 可在 HttpApi 层通过自定义中间件扩展代理行为

NuGet 发布信息

属性
作者 LuciusVorus
公司 LuciusVorus
许可 MIT
标签 geoserver; rest-api; geospatial; gis; abp; module

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages