abp构建Web API服务

使用 ABP vNext 集成 MinIO 构建高可用 BLOB 存储服务 > 本文基于 ABP vNext + MinIO 的对象存储集成实践,系统讲解从 MinIO 部署、桶创建、ABP 集成、上传 API、安全校验、预签名访问,到测试、扩展及多租户支持的全过程。目标是构建一套可复现、可维护、可扩展的企业级文件存储服务。 阅读详情

构建动态Web API控制器

ABP可以自动地为应用层生成Web API 层。比如说我们之前创建的应用层:

复制代码
namespace Noah.ChargeStation.Application.CitiesApp
{
    public interface ICityAppService:IApplicationService
    {
        GetCitiesOutput GetCities(GetCityInput input);
        Task<GetCitiesOutput> GetCitiesAsync(GetCityInput input);
        void UpdateCity(CityInput input);
        Task UpdateCityAsync(CityInput input);
        void CreateCity(CreateCityInput input);
        Task CreateCityAsync(CreateCityInput input);
    }
}
复制代码

我们想要把这些服务作为Web API 控制器暴露给客户端。ABP通过一句代码就可以自动、动态地为该应用层创建Web API 控制器,在Web API层的Api文件夹下找到xxxWebApiModule类的Initialize方法,添加代码:

DynamicApiControllerBuilder.For<ICityAppService>("ChargeStationAPI/City").Build();

你要做的就这么多!这样,在“/api/services/chargeStationAPI/City”的地方就创建了一个API控制器,所有的方法客户端都可以使用。

ICityAppService是我们想要使用Api 控制器包装的应用服务。对于应用服务这不是强制的而是传统推荐的方式。“ChargeStationAPI/CIty”是一个有着任意命名空间的控制器名字。你应该至少定义一级的命名空间,也可以定义更深层次的命名空间,

比如“myCompany/myApplication/myNamespace1/myNamespace2/myServiceName”。“/api/services/”是所有的Web API控制器的前缀 。因而API控制器的地址将会是这个样子的“/api/services/ChargeStationAPI/City”,GetCities方

法的地址就是“/api/services/ChargeStationAPI/City/getCities”。因为在Javascript中的命名惯例是camelCase,所以方法名就自动转成了camelCase命名的格式。

ForAll 方法

在一个应用中,我们可能有许多应用服务,一个一个地构建api控制器也许是一个乏味而难忘的工作。DynamicAPIControllerBuilder提供了一种方法,可以在一次调用中,对所有的应用服务创建web api 控制器。例如:

DynamicApiControllerBuilder
    .ForAll<IApplicationService>(typeof(ChargeStationApplicationModule).Assembly, "ChargeStationAPI")
    .Build();

ForAll方法是一个接收接口的泛型方法。第一个参数是程序集对象,该程序集包含从给定接口派生的类。最后一个参数是服务命名空间的后缀。比如我们在给定程序集中有ICityAppService和IProvinceAppService。对于该配置,服务就是

“/api/services/ChargeStationAPI/CityApp”和“/api/services/ChargeStationAPI/ProvinceApp”。计算服务名的过程是这样的:移除服务接口的Service和AppService后缀以及I前缀。而且,服务名格式被转成了camelCase格式。如果不喜欢

这个转换,那么你可以通过“WithServiceName”方法决定你命名。除此之外,还有一个Where方法来过滤服务。如果你要为所有的应用服务构建, 其次在此基础上再排除一些,那么这很有用。

重写ForAll方法

可以在ForAll方法之后重写配置。例如:

复制代码
DynamicApiControllerBuilder
    .ForAll<IApplicationService>(typeof(ChargeStationApplicationModule).Assembly, "ChargeStationAPI")
    .Build();//告诉生成器为所有实现了IApplicationService接口的服务方法创建api控制器
DynamicApiControllerBuilder
    .For<ICityAppService>("ChargeStationAPI/City")
    .ForMethod("CreateCity").DontCreateAction()
    .Build();//告诉生成器不要生成"ChargeStationAPI/City"的"CreateCity"方法
复制代码
Http 动词

所有的方法默认都是以POST方式创建的。因此,为了使用创建的Web Api方法,客户端应该发送post请求。我们通过不同的方式改变这个行为。

WithVerb方法

可以为一个方法使用WithVerb,像下面这样:

DynamicApiControllerBuilder.For<ICityAppService>("ChargeStationAPI/City")
    .ForMethod("getCities").WithVerb(HttpVerb.Get)
    .Build();

下面直接演示一下:

image

我们直接在Url地址栏发送一次get请求,发现有一个Json格式的数据,错误信息很明确,“输入是null”。虽然报错了,至少可以肯定的是已经生成了web api控制器,只是该控制器需要一个输入参数而已。

HTTP特性

我们可以把HttpGet,HttpPost…特性加到服务接口的方法上:

复制代码
public interface ICityAppService:IApplicationService
{
    [HttpGet]
    GetCitiesOutput GetCities(GetCityInput input);
    [HttpGet]
    Task<GetCitiesOutput> GetCitiesAsync(GetCityInput input);
    [HttpPost]
    void UpdateCity(CityInput input);
    [HttpPost]
    Task UpdateCityAsync(CityInput input);
    [HttpPost]
    void CreateCity(CreateCityInput input);
    [HttpPost]
    Task CreateCityAsync(CreateCityInput input);
}
复制代码

要使用这些HTTP特性,就必须向应用层项目中添加Microsoft.AspNet.WebApi.Core Nuget包的引用。添加了HTTP特性之后,就不需要使用上面的WithVerb方法了。

命名惯例

不需要为每一个方法声明HTTP动词,可以使用WithConventionalVerbs方法:

DynamicApiControllerBuilder
    .ForAll<IApplicationService>(typeof(ChargeStationApplicationModule).Assembly, "ChargeStationAPI")
    .WithConventionalVerbs()//根据方法名使用惯例HTTP动词,默认对于所有的action使用Post
    .Build();

这种情况,HTTP动词是通过方法名的前缀决定的:

  • Get:方法名以Get开头。
  • Put:方法名以Put或Update开头。
  • Delete:方法名以Delete或Remove开头。
  • Post:方法名以Post或Create开头。
  • 否则,Post是HTTP动词的默认值。

我们可以通过对特定的方法使用WithVerb方法或者HTTP特性来覆盖上述惯例。

动态Javascript代理

在Javascript中,可以经由Ajax使用动态创建的web api控制器。ABP通过为动态的web api控制器创建动态的Javascript代理简化了这个。因此,可以在Javascript中像调用一个function一样来调用一个动态的web api 控制器action:

 

Javascript代理是动态创建的。使用之前应该将下面动态的脚本包括在页面上。

<script src="~/api/AbpServiceProxies/GetAll"></script>

可以注册done,fail,then等回调函数。服务方法内部使用了abp.ajax。如果需要的话,它们处理错误并显示错误信息。

Ajax参数

可以传递一个自定义的ajax参数给代理方法。可以将它们作为第二个参数传递:

 

1
2
3
4
5
6
7
8
9
abp.services.tasksystem.task.createTask({
     assignedPersonId: 3,
     description:  'a new task description...'
},{  //override jQuery's ajax parameters
     async:  false ,
     timeout: 30000
}).done( function  () {
     abp.notify.success('successfully created a task!');
});

  

单独服务脚本

'/api/AbpServiceProxies/GetAll'在一个文件中生成所有的服务代理。使用'/api/AbpServiceProxies/Get?name=serviceName'也可以生成一个单独的服务代理,只需要在页面中包括下面的代码:

<script src="/api/AbpServiceProxies/Get?name=tasksystem/task" type="text/javascript"></script>
Angular支持

ABP可以作为angular服务暴露动态的api控制器。

复制代码
(function() {
    angular.module('ChargeStationAPI').controller('CityListController', [
        '$scope', 'abp.services.chargeStationAPI.City',
        function($scope, cityService) {
            var vm = this;
            vm.cities = [];
            taskService.getCities({
                ProvinceCode: 1
            }).success(function(result) {
                vm.cities = result.cities;
            });
        }
    ]);
})();
复制代码

我们可以使用服务的名字(包含命名空间)注射一个服务。然后,可以作为正常的Javascript函数调用它的function。注意,我们注册到了success句柄上(而不是done),因为它就像在angular的$http服务中。ABP使用AngularJs的$http服务。如果

你想要传递$http配置,可以作为服务方法的最后一个参数传递一个配置对象。

要使用自动生成的服务,应该在页面中包含需要的脚本:

<script src="~/Abp/Framework/scripts/libs/angularjs/abp.ng.js"></script>
<script src="~/api/AbpServiceProxies/GetAll?type=angular"></script>
玩转ABP框架 ABP 框架是一个完整的基础架构,通过遵循软件开发最佳实践和约定来创建现代 Web 应用程序。ABP 提供了一个高级框架和生态系统来帮助您实现 Don't Repeat Yourself (DRY) 原则并让您专注于业务代码。 本书由 ABP 框架的创建者撰写,将帮助您从头开始全面了解 ABP 框架和现代 Web 应用开发技术。通过对基本概念和示例的逐步讲解,您将了解现代 Web 解决方案的要求以及 ABP 框架如何使让发变得更加舒适愉快。您将了解企业 Web 应用开发的常见需求,并探索 ABP 框架提供 阅读详情

相关推荐

ABP框架学习

ABP框架学习摘要 ABP Framework是ASP.NET Boilerplate的现代化重构版本,基于.NET Core/5+设计,采用模块化架构。主要特性包括: 原生支持EF Core和MongoDB 自动API控制器生成 深度前端集成 内置微服务支持 创建项目需定义继承AbpModule的模块类,通过DependsOn声明依赖关系。模块生命周期包含: PreConfigureServices:预配置 ConfigureServices:服务注册 OnApplicationInitializatio

contact97的博客 1709

添加web服务器功能组件,浅入 ABP系列(3):增加日志组件、依赖注入服务

版权护体©作者:痴者工良,微信公众号转载文章需要 《NCC开源社区》同意。前面两篇我们搭建了一个基础的、简单的,具有统一响应格式的 Web 程序,这一篇内容不多,继续增加一些需要的组件功能。前面两篇已经搭建好基架,所以我们可以直接使用基架来逐渐增加功能,本系列后面的篇章会针对多方面的内容来逐渐讲解。基架项目位置在 src/2/AbpBase 里面。自动依赖注入在 AbpBase.Web 的 Abp...

weixin_28630185的博客 373

【框架】ABP(ASP.NET Boilerplate Project)

ABP架构是“ASP.NET Boilerplate Project”(ASP.NET样板项目)的简称,它是一个基于领域驱动设计(DDD)的开源应用程序框架,支持.NET Framework和.NET Core。ABP旨在成为开发现代WEB应用程序的新起点,通过提供最佳实践和流行技术,帮助开发者快速构建和扩展应用程序。

欢迎指错||纠正||建议||水评+点赞&&评论&&关注&&转发 6924

构建Web API服务

返回总目录《一步一步使用ABP框架搭建正式项目系列教程》 构建动态Web API控制器 ABP可以自动地为应用层生成Web API 层。比如说我们之前创建的应用层: namespace Noah.ChargeStation.Application.CitiesApp { public interface ICityAppService:IApplicationServic...

weixin_34360651的博客 431

ABP vNext-模块 .NET

ABP vNext是一个开源的应用程序框架,用于构建现代化的企业级Web应用程序。它提供了一套丰富的功能和模块化的架构,使开发人员能够快速构建可扩展、可维护和可测试的应用程序。本文将重点介绍ABP vNext框架中的模块开发,以及如何使用.NET语言进行模块开发。通过创建模块,开发人员可以将应用程序的功能划分为独立的单元,使代码结构更加清晰和可维护。ABP vNext框架提供了丰富的功能和扩展点,使模块开发变得更加灵活和高效。一个模块是一个封装了一组相关功能的独立单元,可以被其他模块或应用程序引用和使用。

YOLOv222的博客 424

OrangePi Kunpeng Pro 安装 ROS2 + Gazebo

OrangePi Kunpeng Pro 的优点很明显,内置openEuler,配备PD电源,做到开箱即用;板子设计也不错,风扇噪音不大,散热良好,昇腾芯片又确保小板子的性能,接口丰富是这类板子共同的优点,也很好的继承了下来,甚至还可以外接固态,可靠性大大提升。使用起来,哪怕不用openEuler的话,也可以很方便的刷Ubuntu来实现一些需要依赖的开发工作,这次没有跑AI模型,所以对算力的优势还没有很明显的感受,下次可以试一下yolo跑跑看。

Arcan 1824

ABP学习 之 如何添加API

一个后端系统最重要的当然是提供API给前端调用。那么应用ABP模板的Project,应该如何添加API呢?

DinoFong的专栏 1523

HFSS15 win10_64位破解

HFSS15 win10_64位破解 找到的别人的软件,但在首次安装时失败了,并不能patched。寻找了几种方法,已成功安装。在此写下安装经验,供大家参考。 软件安装包以及破解软件: 链接:https://pan.baidu.com/s/1MMjV_31maU5QD6fmI4zfIA 提取码:yj4q 在安装之前,建议关闭杀毒软件。 Step1:进入HFSS150Win64安装包,点击au...

玉笙寒 4万+

ABP 创建 webapi

有两个方法 一, Application层 代码如下:继承IApplicationService public class TestService : IApplicationService { public List<dynamic> Test() { List<dynamic> list = new List<dynamic>() { .

正怒月神的博客 1124

台达PLC使用RS485Modbus指令通信

台达PLC,RS485,Modbus RTU,从站梯形图,0X01,0X02,0X05,CRC校验

lilililimu的博客 1万+

Mac无管理员权限安装NVM全攻略(附国内镜像加速)

本文详细介绍了在Mac电脑无管理员权限的情况下,如何通过Git克隆方式安装Node版本管理工具NVM,并配置国内镜像源以加速下载。攻略涵盖环境检查、安装步骤、Shell环境变量配置、镜像加速设置以及常用命令和常见问题解决方案,帮助开发者绕过权限限制,高效管理Node.js版本。

weixin_29296241的博客 489

ABP框架----写一个WebAPI

首先要从ABP官网下载一个模板 ASP.NET Core中选择哪一个模板都可以 由于不是使用webapi,现在只是在后台完成,所以模板的选择对写webapi是没有影响的,多页面还是单页面都可以 下载完模板,解压缩,打开解决方案。 (1)设置启动项,由于我们现在要实现webapi,所以将web.host设置成启动项,这样后面写的webapi就能看到了。 (2)还原NuGet包,右键解...

小幸运 2045

YOLO11涨点优化:Loss魔改 | WIoU (Wise-IoU) v3版本全面替换,基于动态非单调聚焦机制,让模型更聪明地学习

YOLOv11目标检测中的WIoU v3损失函数改进 本文探讨了YOLOv11目标检测模型中CIoU损失函数的局限性,并提出了WIoU v3改进方案。关键发现包括: CIoU的缺陷:在低质量样本(小目标/遮挡目标)上过度惩罚,导致模型优化方向偏离,小目标AP往往比大目标低30%左右。 WIoU v3的创新: 动态非单调聚焦机制:根据样本"离群度"智能分配梯度 让模型重点优化中等质量样本,减少对低质量样本的无效关注 采用指数移动平均来自适应调整质量评判标准 实际效果:WIoU v3在保持大

2601_95807009的博客 422

ABP入门系列之1——ABP总体介绍

ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称。 ASP.NET Boilerplate是一个用最佳实践和流行技术开发现代WEB应用程序的新起点,它旨在成为一个通用的WEB应用程序框架和项目模板。 ASP.NET Boilerplate 基于DDD的经典分层架构思想,实现了众多DDD的概念(但没有实现所有DDD的概念)。 ABP...

banggujuan3308的博客 4680

LDRA Testbed(TBrun)软件单元测试_实例讲解(对多次调用的函数打桩)

在之前的文章《LDRA Testbed(TBrun)软件单元测试_操作指南》中,已经讲解了如何使用TBrun进行软件单元测试的基本操作步骤。本篇文章将结合实例进一步讲解被测函数中包含多次调用其他函数时,如何对其打桩来实现测试目的(详细的操作流程本文不再重述,若有不清楚的,可以结合之前的操作指南一起来看)。本文以一个被测函数作为示例,讲解了如何使用Testbed(TBrun)对涉及到多次调用其他函数的被测函数进行单元测试。本文的示例可能比较简单,但是思路、方法和流程都是通用的,希望对大家有所帮助。

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 1462

uniapp [全端兼容] - 详细实现人脸识别和活体检测功能,实时监测人脸是否进入区域及动作是否正确播报,免费自动提示引导动作及语音,提供提供实名认证、身份证识别、人脸信息采集、刷脸扫脸认证示例代码

uniapp,h5移动端网页,微信小程序,支付宝小程序,Android安卓,苹果ios,app,nvue,人脸识别,扫脸认证,人脸认证,活体认证,身份认证,uni-app人脸识别详细教程,如何在app端实现免费人脸识别教程,如何在小程序端做,最好用的插件,安卓ios百度人脸识别、活体检测、人脸采集APP,H5人脸识别带前后摄像头,适合新手看的人脸识别功能教程,详细示例代码源码,有没有免费的,接入百度,阿里云人脸识别,百度,api,活体检测,数据采集,动作提示指引,语音提示指引,报错,无法核验一直出错,根本用

🏆 前端领域优质创作者 1万+

Abp vnext构建API接口服务

阅读目录一、使用ABP框架可以快速的搭建一个应用程序,仅需要几步即可完成:安装ABP CLI在一个空文件夹中使用abp new命令创建您的项目二、用APB基础架构搭建一个用户中心API接...

kaixincheng2009的专栏 2207

ISO2626 --- Item Definition相关项定义

本文并不是针对ISO26262的一个项目,而是针对ISO26262的规范,我们在相关项定义阶段,我们需要做什么,我们的文档需要包含哪些内容的一个描述。

wj博客 909

C# Abp框架入门系列文章(一)

随着技术的进步,各式各样的框架层出不穷,轮子越来越多,那么有没有哪些优秀的开发框架供我们使用呢?如果我们能够将各方面优秀的框架集合起来,应用到项目开发中,我们的工作是不是能事半功倍呢?而且各个框架的使用方向不同,很多配置也不同,如果能够将繁杂的基础工作集成起来,由统一的框架来完成,那么我们就可以专注于业务逻辑,提高工作效率。现在Abp就是这么一个框架,使用流行技术开发现代web应用程序的最佳实践。本文作为Abp框架的入门文章,仅供学习分享使用,如有不足之处,还请指正。

绳锯木断,水滴石穿,专心写文,无问西东!!! 1万+

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

为abp的application service 添加Swagger的Restful api 描述, 并动态生成web api

如果不选择多租户, ABP生成的sample并没有把后台逻辑包装成RESTFul api, 而是mvc前端直接dll引用application service。我们需要做2点改动:1.把mvc改成web api host, 然后添加swagger的描述2.把application service动态生成web api。步骤:1.在Web工程的wwwroot中添加swagger 的前端页面资源把...

muzizongheng的专栏 2824

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Abp vnext Web应用程序开发教程 1 —— 创建服务器端

文章目录关于本教程下载源代码创建解决方案创建书籍实体BookType枚举将图书实体添加到DbContext将图书实体映射到数据库表添加数据库迁移添加样本种子数据更新数据库创建应用程序服务BookDtoCreateUpdateBookDtoIBookAppServiceBookAppService自动API控制器Swagger UI下一部分 关于本教程 在本教程系列中,您将构建一个名为Acme.BookStore的基于ABP的Web应用程序。该应用程序用于管理书籍及其作者的列表。它是使用以下技术开发的: 实

寒冰屋的专栏 2521

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ABP框架 - 动态Web Api层

文档目录 本节内容: 创建动态Web Api控制器 ForAll 方法 重写 ForAll ForMethods Http 动词 WithVerb 方法 HTTP 特性 命名约定 Api 浏览器 RemoteService 特性 动态Javascript代理 AJAX 参数 单独服务脚本 Angular 集成...

aichun6888的博客 816

ABP文档 - Web Api 控制器

文档目录 本节内容: 简介 AbpApiController 基类 本地化 其它 过滤 审计日志 授权 防伪造过滤 工作单元 结果包装和异常处理 结果缓存 验证 模块绑定器 简介 通过Abp.Web.Api的nuget包,把ABP集成到Asp.net Web Api 控制器里。你可以像之前做的那样创建平常的As...

aichun6888的博客 213

ABP Framework(abp.io)入门手册

ABP Framework 极大提升了 ASP.NET Core 应用的开发效率和架构规范性,尤其适合中大型企业级应用。建议从官方模板入手,结合文档逐步深入 DDD 和微服务实践。真正的 DDD 实践:不是口号,而是强制分层与聚合根设计。企业级功能开箱即用:多租户、审计日志、软删除、数据过滤、权限系统等无需重复造轮子。前后端高效协同:应用服务自动生成 API + 客户端代理,减少接口联调成本。模块化与可扩展性:支持构建可复用的业务模块(如活跃的商业支持。

软件行业技术文化交流。 2592

ABP框架实战:从零构建模块化.NET应用

本文详细介绍了如何使用ABP框架从零构建模块化.NET应用。通过对比传统“面条代码”的弊端,阐述了ABP以模块化为核心的设计哲学如何提升代码结构清晰度、可维护性和开发效率。文章通过创建控制台和Web API两个实战项目,逐步演示了模块定义、依赖管理及启动流程,并深入剖析了模块生命周期与加载顺序,为开发者提供了构建松耦合、高内聚企业级应用的完整指南。

tgb3456789的博客 673
上一篇: EF Code First Migrations数据库迁移
killcwd
博客等级 码龄16年 49粉丝 26原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值