济南网站优化推广公司电话,superstore wordpress下载,个人门户网站开发,wordPress如何把菜单加入导航前言本文介绍另一种学习ABP框架的方法#xff0c;该方法为正面硬钢学习法。。。我们不去官网下载模板#xff0c;直接引用DLL#xff0c;直接使用。WebApi项目创建首先创建一个WebApi项目#xff0c;结构如下。然后Nuget搜索ABP#xff0c;安装ABP框架。(我这里安装的是5.…前言本文介绍另一种学习ABP框架的方法该方法为正面硬钢学习法。。。我们不去官网下载模板直接引用DLL直接使用。WebApi项目创建首先创建一个WebApi项目结构如下。然后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查看已安装包的信息)然后修改Global.asax修改代码如下using Abp.Web;using ABPWebApi;using System;using System.Web;[assembly: PreApplicationStartMethod(typeof(PreStarter), Start)]namespace ABPWebApi{public class WebApiApplication : Abp.Web.AbpWebApplication{protected override void Application_Start(object sender, EventArgs e){base.Application_Start(sender, e);}}public static class PreStarter{public static void Start(){ //WebApiApplication.AbpBootstrapper.PlugInSources.AddToBuildManager();}}}这里WebApiApplication不再继承System.Web.HttpApplication改为继承ABP框架下的Abp.Web.AbpWebApplication因此原生框架提供的Application_Start不再需要代码里重写了ABP的Application_Start这样我们就找到了Application_Start可以在启动时做自己想做的事情了。AbpWebApplication是个泛型要求指定默认启动模块的类这里我们先写上SdudentApiServiceModule下面会创建这个类。在Global中还使用PreApplicationStartMethod做了一些启动预处理,比如加载一些插件当然也可以什么都不做。如果要加载插件或者做一些其他操作则需要再引入ABP.WEB因为一些配置的依赖库在这里这里同样引用5.1.0版本。因为使用了ABP框架所以我们不再需要微软提供的默认布局了下面我们微软的默认布局文件夹删除如下图现在我们新建一个类库创建一个SdudentApi模块用来编写可以被HTTP访问的接口。创建完类库后我们需要在类库里添加一个自定义类来标记这个类库是WebApi服务模块。创建SdudentApiServiceModule类并继承AbpModule。很明显AbpModule在SdudentApi类库是未被引用的所以我们要引用一下ABP的框架。因为这个模块是WebApi所以我们直接引用Abp.Web.Api5.1.0就可以了。(由于Abp.Web.Api依赖于Abp所以Abp也会被同时引入)现在我们编辑SdudentApiServiceModule类。因为继承了AbpModule所以我们可以override它PreInitializeInitializePostInitializeShutdown它们分别是模块初始化前中后和关闭。(只有被加载和关闭时调用这些方法调用API方法时这些不触发)下面我们编写下SdudentApiServiceModule代码如下[DependsOn(typeof(Abp.WebApi.AbpWebApiModule))]public class SdudentApiServiceModule : AbpModule{public override void PreInitialize(){Configuration.Modules.AbpWeb().AntiForgery.IsEnabled false;Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients true;}public override void Initialize(){//按照约定ABP自动注册所有 Repositories Domain Services Application Services MVC 控制器和Web API控制器//ABP按照约定注册程序集下面代码将告诉ABP要注册当前程序集。IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());//动态ApiController创建需要在将当前程序集注册进ABP后才可以调用//WebApi访问路径默认前缀api/servicesSdudent是我们追加的前缀可以自定义例如Sdudent/Task//外放成ApiController的服务需要继承ABP的IApplicationService接口需要准守命名约定这样才能被搜索到(服务命名约定服务名AppService例如SearchSdudentAppService)Configuration.Modules.AbpWebApi().DynamicApiControllerBuilder.ForAll(Assembly.GetAssembly(typeof(SdudentApiServiceModule)), Sdudent).Build();}public override void PostInitialize(){}public override void Shutdown(){}}首先我们为SdudentApiServiceModule添加依赖[DependsOn(typeof(Abp.WebApi.AbpWebApiModule))]这是因为ABP都是通过Castle进行依赖控制反转实例化对象的所以在实例化SdudentApiServiceModule时如果它依赖的类没有被装载它就会报错因为我们在写WebApi所以很明显我们依赖Abp.WebApi.AbpWebApiModule这个模块。PreInitialize这里我们Http请求的简单配置还可以继续配置ABP配置很多。Initialize这里将当前类装载进ABP同时动态创建了ApiController。PostInitialize和Shutdown暂时无操作。现在我们创建服务(它们将被转换成ApiController)。创建接口ISearchSdudentAppService代码如下public interface ISearchSdudentAppService : IApplicationService{[HttpGet]string GetSdudent();}注意接口方法需要加[HttpGet]不加的会被默认注册为Post测试时会出现无法访问的问题。创建服务SearchSdudentAppService代码如下public class SearchSdudentAppService: ISearchSdudentAppService{public string GetSdudent(){return I am a Sdudent;}}SdudentApiServiceModule编写完成现在我们运行项目测试一下。如上图访问成功。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。SdudentApiServiceModule模块的PreInitialize方法里追加配置。var cors new EnableCorsAttribute(*, *, *);GlobalConfiguration.Configuration.EnableCors(cors);Filter配置在SdudentApiServiceModule模块创建ExceptionFilter类代码如下public class ExceptionFilter : IExceptionFilter, ITransientDependency{public bool AllowMultiple true;public async Task ExecuteExceptionFilterAsync(HttpActionExecutedContext actionExecutedContext, CancellationToken cancellationToken){await Task.Run((){if (actionExecutedContext null){return;}if (actionExecutedContext.Exception null){return;}//记录actionExecutedContext.Exception});}}在SdudentApiServiceModule类的PostInitialize里配置Fliter。public override void PostInitialize(){GlobalConfiguration.Configuration.Filters.Add(new ExceptionFilter());}模块依赖依照上文在创建一个TeacherApi模块然后修改Global的启动模块为TeacherApiServiceModule然后引入SdudentApi项目。然后编写TeacherApiServiceModule代码如下[DependsOn(typeof(Abp.WebApi.AbpWebApiModule), typeof(SdudentApiServiceModule))]public class TeacherApiServiceModule : AbpModule{private readonly SdudentApiServiceModule _SdudentApiServiceModule;public TeacherApiServiceModule(SdudentApiServiceModule sdudentApiServiceModule){_SdudentApiServiceModule sdudentApiServiceModule;}public override void PreInitialize(){Configuration.Modules.AbpWeb().AntiForgery.IsEnabled false;Configuration.Modules.AbpWebCommon().SendAllExceptionsToClients true;}public override void Initialize(){IocManager.RegisterAssemblyByConvention(Assembly.GetExecutingAssembly());Configuration.Modules.AbpWebApi().DynamicApiControllerBuilder.ForAll(Assembly.GetAssembly(typeof(TeacherApiServiceModule)), Sdudent).Build();}public override void PostInitialize(){var ret _SdudentApiServiceModule.GetSdudent();Console.WriteLine(ret);}public override void Shutdown(){}}如上代码所示我们在DependsOn上追加SdudentApiServiceModule依赖然后在TeacherApiServiceModule的构造函数里使用SdudentApiServiceModule类型参数然后运行时参数就会被实例化并注入进来。现在我们访问TeacherApi的访问把TeacherApiServiceModule模块调用起来看下模块的PostInitialize里是否成功调用了SdudentApiServiceModule模块的方法。如上图依赖调用成功。Swagger配置Nuget搜索Swashbuckle.core。模块下添加函数private void ConfigureSwaggerUi(){Configuration.Modules.AbpWebApi().HttpConfiguration.EnableSwagger(c {c.SingleApiVersion(v1, 文档);c.ResolveConflictingActions(apiDescriptions apiDescriptions.First());}).EnableSwaggerUi();}然后在Initialize()里调用该函数配置完成。然后运行项目输入swagger/ui/index如下图代码已经传到Github上了欢迎大家下载。----------------------------------------------------------------------------------------------------注此文章为原创任何形式的转载都请联系作者获得授权并注明出处若您觉得这篇文章还不错请点击下方的【推荐】非常感谢关于找一找教程网本站文章仅代表作者观点不代表本站立场所有文章非营利性免费分享。本站提供了软件编程、网站开发技术、服务器运维、人工智能等等IT技术文章希望广大程序员努力学习让我们用科技改变世界。[【Net】ABP框架学习之正面硬钢]http://www.zyiz.net/tech/detail-124762.html