ABP框架学习之正面硬钢

简介: 本文介绍另一种学习ABP框架的方法,该方法为正面硬钢学习法。。。我们不去官网下载模板,直接引用DLL,直接使用。

前言

本文介绍另一种学习ABP框架的方法,该方法为正面硬钢学习法。。。

我们不去官网下载模板,直接引用DLL,直接使用。

WebApi项目创建

首先创建一个WebApi项目,结构如下。

8.png


然后Nuget搜索ABP,安装ABP框架。(我这里安装的是5.1.0,因为最高版本安装不上)

在安装ABP前先检查当前安装的Microsoft.AspNet.WebApi版本,因为ABP5.1.0依赖的是WebApi的5.2.7,如果WebApi不是5.2.7,在Nuget包管理—程序包管理器控制台中输入Update-Package Microsoft.AspNet.WebApi -Version 5.2.7来升级一下。(Get-Package查看已安装包的信息)

9.png


然后修改Global.asax,修改代码如下:

usingAbp.Web;
usingABPWebApi;
usingSystem;
usingSystem.Web;
[assembly: PreApplicationStartMethod(typeof(PreStarter), "Start")]
namespaceABPWebApi
{
publicclassWebApiApplication: Abp.Web.AbpWebApplication<SdudentApiServiceModule>
{
protectedoverridevoidApplication_Start(object sender, EventArgs e)
{ 
base.Application_Start(sender, e);
} 
}
publicstaticclassPreStarter
{
publicstaticvoidStart()
{     //WebApiApplication.AbpBootstrapper.PlugInSources.AddToBuildManager();
}
}
}

这里WebApiApplication不再继承System.Web.HttpApplication,改为继承ABP框架下的Abp.Web.AbpWebApplication;因此原生框架提供的ApplicationStart不再需要,代码里重写了ABP的ApplicationStart,这样我们就找到了Application_Start,可以在启动时做自己想做的事情了。

AbpWebApplication是个泛型,要求指定默认启动模块的类,这里我们先写上SdudentApiServiceModule,下面会创建这个类。

在Global中,还使用PreApplicationStartMethod做了一些启动预处理,比如加载一些插件,当然也可以什么都不做。

如果要加载插件或者做一些其他操作,则需要再引入ABP.WEB,因为一些配置的依赖库在这里,这里同样引用5.1.0版本。


10.png

因为使用了ABP框架,所以我们不再需要微软提供的默认布局了,下面我们微软的默认布局文件夹删除;如下图:

11.png


现在我们新建一个类库,创建一个SdudentApi模块,用来编写可以被HTTP访问的接口。

创建完类库后,我们需要在类库里添加一个自定义类,来标记,这个类库是WebApi服务模块。

创建SdudentApiServiceModule类,并继承AbpModule。

很明显AbpModule在SdudentApi类库是未被引用的,所以我们要引用一下ABP的框架。

因为这个模块是WebApi,所以我们直接引用Abp.Web.Api5.1.0就可以了。(由于Abp.Web.Api依赖于Abp,所以Abp也会被同时引入)

12.png


现在我们编辑SdudentApiServiceModule类。

因为继承了AbpModule,所以我们可以override它PreInitialize,Initialize,PostInitialize,Shutdown;它们分别是模块初始化前,中,后和关闭。(只有被加载和关闭时调用这些方法,调用API方法时,这些不触发)

下面我们编写下SdudentApiServiceModule,代码如下:

  1. [DependsOn(typeof(Abp.WebApi.AbpWebApiModule))]
  2. publicclassSdudentApiServiceModule: AbpModule
  3. {
  4. publicoverridevoidPreInitialize()
  5. {
  6. Configuration.Modules.AbpWeb().AntiForgery.IsEnabled= false;
  7. Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients= true;  
  8. }
  9. publicoverridevoidInitialize()
  10. {
  11. //按照约定,ABP自动注册所有 Repositories, Domain Services, Application Services, MVC 控制器和Web API控制器
  12. //ABP按照约定注册程序集,下面代码将告诉ABP要注册当前程序集。
  13. IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());
  14. //动态ApiController创建需要在将当前程序集注册进ABP后,才可以调用
  15. //WebApi访问路径默认前缀api/services,Sdudent是我们追加的前缀,可以自定义,例如Sdudent/Task
  16. //外放成ApiController的服务需要继承ABP的IApplicationService接口,需要准守命名约定,这样才能被搜索到(服务命名约定:服务名+AppService,例如SearchSdudentAppService)
  17. Configuration.Modules.AbpWebApi().DynamicApiControllerBuilder
  18. .ForAll<IApplicationService>(Assembly.GetAssembly(typeof(SdudentApiServiceModule)), "Sdudent").Build();  
  19. }
  20. publicoverridevoidPostInitialize()
  21. {
  22. }
  23. publicoverridevoidShutdown()
  24. {  
  25. }
  26. }

首先我们为SdudentApiServiceModule添加依赖[DependsOn(typeof(Abp.WebApi.AbpWebApiModule))],这是因为,ABP都是通过Castle进行依赖控制反转实例化对象的,所以,在实例化SdudentApiServiceModule时,如果它依赖的类没有被装载,它就会报错,因为我们在写WebApi,所以很明显,我们依赖Abp.WebApi.AbpWebApiModule这个模块。

PreInitialize:这里我们Http请求的简单配置,还可以继续配置,ABP配置很多。

Initialize:这里将当前类装载进ABP,同时动态创建了ApiController。

PostInitialize和Shutdown暂时无操作。


现在我们创建服务(它们将被转换成ApiController)。

创建接口ISearchSdudentAppService,代码如下:

publicinterfaceISearchSdudentAppService:  IApplicationService
{
[HttpGet]
stringGetSdudent();
}

注意接口方法需要加[HttpGet],不加的会被默认注册为Post,测试时会出现无法访问的问题。

创建服务SearchSdudentAppService,代码如下:

publicclassSearchSdudentAppService: ISearchSdudentAppService
{ 
publicstringGetSdudent()
{
return"I am a Sdudent";
}
}

SdudentApiServiceModule编写完成,现在我们运行项目测试一下。

13.png


如上图,访问成功。

Url解析:这里我们访问的URL是/api/services/Sdudent/SearchSdudent/GetSdudent。

其中/api/services是默认前缀,Sdudent/是我们自定义前缀,SearchSdudent是Controler名,它是根据服务名来的,服务名减去约定名(SearchSdudentAppService-AppService),GetSdudent是Action名,就是服务里的方法名。


跨域配置

Nuget搜索Microsoft.AspNet.WebApi.Cors,安装与Microsoft.AspNet.WebApi相同版本号的Cors。

14.png

SdudentApiServiceModule模块的PreInitialize方法里追加配置。

var cors = newEnableCorsAttribute("*", "*", "*");
GlobalConfiguration.Configuration.EnableCors(cors);


相关文章
|
12月前
|
消息中间件 分布式计算 Java
Scala语言发展历史及基本常识
Scala,由马丁·奥德斯基于2001年创造,融合了Java和JavaScript的特性,被称为“大数据的黄金语言”。它是Spark、Flink、Kafka等项目的主要开发语言,运行在JVM上,与Java高度兼容,支持面向对象和函数式编程。Scala以精简的语法和高级语言特性著称,成为大数据处理领域的首选语言之一。
|
缓存 开发框架 NoSQL
【Azure Redis 缓存】Azure Redis 异常 - 因线程池Busy而产生的Timeout异常问题
【Azure Redis 缓存】Azure Redis 异常 - 因线程池Busy而产生的Timeout异常问题
210 0
|
人工智能 开发工具 Swift
ModelScope联手OpenDataLab:直接调用7000+开源数据集,赋能AI模型加速研发
魔搭社区和OpenDatalab浦数合作,共同开启一场模型与数据的深度融合,旨在为中国开发者打造更加高效、开放的AI体验。
|
JavaScript 前端开发
在线考试+自动组卷系统
在线考试+自动组卷系统
441 1
|
人工智能 安全 Java
【Java】完全适配各类中小医院专科医院和诊所的云HIS系统源码
【Java】完全适配各类中小医院专科医院和诊所的云HIS系统源码
566 2
【Java】完全适配各类中小医院专科医院和诊所的云HIS系统源码
|
SQL 监控 安全
数据库教程:从设计到优化的全面指南
数据库教程:从设计到优化的全面指南
|
Shell Linux 开发工具
三招教你轻松扩展 git bash 命令(上)(二)
GitBash 是 Windows 系统安装 Git 时默认集成的命令行工具,提供运行 Git 命令的集成环境.
三招教你轻松扩展 git bash 命令(上)(二)
|
运维 大数据 数据挖掘
SelectDB x 白鲸开源金融大数据解决方案正式发布!
飞轮科技联合白鲸开源,针对金融行业大数据实时分析的场景共同推出高效实用的解决方案。
747 0
|
SQL 关系型数据库 MySQL
【数据库】MySQL表的增删改查(基础命令详解)
【数据库】MySQL表的增删改查(基础命令详解)