日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

abp框架java,【Net】ABP框架学习之正面硬钢

發布時間:2023/12/4 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 abp框架java,【Net】ABP框架学习之正面硬钢 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

本文介紹另一種學習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它PreInitialize,Initialize,PostInitialize,Shutdown;它們分別是模塊初始化前,中,后和關閉。(只有被加載和關閉時調用這些方法,調用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/services,Sdudent是我們追加的前綴,可以自定義,例如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

總結

以上是生活随笔為你收集整理的abp框架java,【Net】ABP框架学习之正面硬钢的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。