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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

基于 abp vNext 和 .NET Core 开发博客项目 - 完善与美化,Swagger登场

發(fā)布時間:2025/1/21 asp.net 62 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于 abp vNext 和 .NET Core 开发博客项目 - 完善与美化,Swagger登场 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

基于 abp vNext 和 .NET Core 開發(fā)博客項目 - 完善與美化,Swagger登場

轉(zhuǎn)載于:https://github.com/Meowv/Blog.git

在程序員界,總有一批強迫癥患者,他們希望自己寫的代碼看起來盡量的完美無瑕疵。

完善與美化

直奔主題,首先將各項目層的項目文件(.csproj)打開,格式化一下,沒有引用這句代碼的也加一下,這里其實就是將公共屬性拿出來,沒什么特殊的。

common.props中的代碼也非常簡單,主要是禁用當(dāng)開啟輸出XML的時候沒有給代碼進(jìn)行summary注釋產(chǎn)生的警告,其實這些大可不必為之折騰,不影響項目的成功運行。如果您覺得沒啥必要,完全可以跳過此小節(jié)看最后。

.Application

.Application層現(xiàn)在只引用Volo.Abp.Identity.Application包,和依賴.Application.Caching、.Application.Contracts、.Domain.Shared三個項目。

//Meowv.Blog.Application.csproj

netcoreapp3.1 <ProjectReference Include="..\Meowv.Blog.Application.Caching\Meowv.Blog.Application.Caching.csproj" /> <ProjectReference Include="..\Meowv.Blog.Application.Contracts\Meowv.Blog.Application.Contracts.csproj" /> <ProjectReference Include="..\Meowv.Blog.Domain.Shared\Meowv.Blog.Domain.Shared.csproj" />

.Application.Caching

.Application.Caching層看名字就知道,我準(zhǔn)備用它來處理緩存,這里會用到兩個包,Volo.Abp.Caching、Microsoft.Extensions.Caching.Redis

不管三七二十一,新建一個模塊類MeowvBlogApplicationCachingModule.cs,依賴于AbpCachingModule和我們的MeowvBlogDomainModule模塊(此時還沒添加)

using Volo.Abp.Caching;
using Volo.Abp.Modularity;

namespace Meowv.Blog.Application.Caching
{
[DependsOn(
typeof(AbpCachingModule)
// …
)]
public class MeowvBlogApplicationCachingModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
base.ConfigureServices(context);
}
}
}

//Meowv.Blog.Application.Caching.csproj

netcoreapp3.1 <ProjectReference Include="..\Meowv.Blog.Application.Contracts\Meowv.Blog.Application.Contracts.csproj" /> <ProjectReference Include="..\Meowv.Blog.Domain.Shared\Meowv.Blog.Domain.Shared.csproj" /> <ProjectReference Include="..\Meowv.Blog.ToolKits\Meowv.Blog.ToolKits.csproj" />

.Application.Contracts

刪掉里面所有文件,.Application.Contracts層我不準(zhǔn)備按照abp那樣來做,此層我只想用來放我們的傳輸對象(DTO),添加項目引用Domain.Shared,同時開啟輸出XML文件到我們.HttpApi.Hosting

輸出XML很簡單,在 Visual Studio 中對著項目 右鍵=>屬性=>生成=>輸出,然后選擇XML文檔文件,默認(rèn)為一個物理路徑,我們將其改為相對路徑…\Meowv.Blog.HttpApi.Hosting\Meowv.Blog.Application.Contracts.xml,XML輸出到.HttpApi.Hosting層。

也可以直接修改項目文件實現(xiàn),如下

//Meowv.Blog.Application.Contracts.csproj

netcoreapp3.1 ..\Meowv.Blog.HttpApi.Hosting\Meowv.Blog.Application.Contracts.xml

.Domain

.Domain層為我們的實體領(lǐng)域模型,不需要引用其它層,只添加包Volo.Abp.Identity.Domain,同時也輸出一下XML文件,XML文件的作用后續(xù)Swagger會用的。

//Meowv.Blog.Domain.csproj

netcoreapp3.1 ..\Meowv.Blog.HttpApi.Hosting\Meowv.Blog.Domain.xml <ProjectReference Include="..\Meowv.Blog.Domain.Shared\Meowv.Blog.Domain.Shared.csproj" />

刪掉此層所有文件,不要忘了添加模塊類,MeowvBlogDomainModule.cs,它依賴AbpIdentityDomainModule模塊

using Volo.Abp.Identity;
using Volo.Abp.Modularity;

namespace Meowv.Blog.Domain
{
[DependsOn(typeof(AbpIdentityDomainModule))]
public class MeowvBlogDomainModule : AbpModule
{

}

}

此時上面.Application.Caching中可以將MeowvBlogDomainModule加上了。

//MeowvBlogApplicationCachingModule.cs

[DependsOn(
typeof(AbpCachingModule),
typeof(MeowvBlogDomainModule)
)]
public class MeowvBlogApplicationCachingModule : AbpModule
{

}

.Domain.Shared

.Domain.Shared層相當(dāng)于.Domain的一個擴(kuò)展一樣,這里放一下項目用到的枚舉、公共常量等內(nèi)容,需要引用我們的.Domain項目

netcoreapp3.1 還是要新增一個模塊類MeowvBlogDomainSharedModule.cs,它依賴AbpIdentityDomainSharedModule模塊

//MeowvBlogDomainSharedModule.cs
using Volo.Abp.Identity;
using Volo.Abp.Modularity;

namespace Meowv.Blog.Domain
{
[DependsOn(typeof(AbpIdentityDomainModule))]
public class MeowvBlogDomainModule : AbpModule
{
}
}

.EntityFrameworkCore

.EntityFrameworkCore層同樣的,先刪掉默認(rèn)生成的文件。它主要是集成了EF Core,自定義倉儲。詳細(xì)可以看看abp文檔:https://docs.abp.io/zh-Hans/abp/latest/Repositories

它支持多種數(shù)據(jù)庫 MySQL、SqlServer、PostgreSql、Sqlite等,如果你有用到MongoDB,則需要新建一個項目,單獨實現(xiàn)。可以看官方文檔,有時間可以分享具體方法,本項目用不到。https://docs.abp.io/zh-Hans/abp/latest/MongoDB

為了方便大家,我把以上4種主流數(shù)據(jù)庫都集成到項目中,添加包Volo.Abp.EntityFrameworkCore.MySQL,.PostgreSql、.Sqlite、.SqlServer,同時引用.Domain.Shared項目

//Meowv.Blog.EntityFrameworkCore.csproj

netcoreapp3.1 <ProjectReference Include="..\Meowv.Blog.Domain.Shared\Meowv.Blog.Domain.Shared.csproj" />

新建一個模塊類MeowvBlogFrameworkCoreModule.cs,依賴MeowvBlogDomainModule和數(shù)據(jù)庫模塊

//MeowvBlogFrameworkCoreModule.cs
using Meowv.Blog.Domain;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.MySQL;
using Volo.Abp.EntityFrameworkCore.PostgreSql;
using Volo.Abp.EntityFrameworkCore.Sqlite;
using Volo.Abp.EntityFrameworkCore.SqlServer;
using Volo.Abp.Modularity;

namespace Meowv.Blog.EntityFrameworkCore
{
[DependsOn(
typeof(MeowvBlogDomainModule),
typeof(AbpEntityFrameworkCoreModule),
typeof(AbpEntityFrameworkCoreMySQLModule),
typeof(AbpEntityFrameworkCoreSqlServerModule),
typeof(AbpEntityFrameworkCorePostgreSqlModule),
typeof(AbpEntityFrameworkCoreSqliteModule)
)]
public class MeowvBlogFrameworkCoreModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{

} }

}

.EntityFrameworkCore.DbMigrations

.EntityFrameworkCore.DbMigrations層主要做數(shù)據(jù)庫遷移,用code-first方式創(chuàng)建數(shù)據(jù)庫表,先刪掉默認(rèn)生成的文件,目前還用不上,后面講。

.ToolKits

.ToolKits層是我們手動創(chuàng)建的項目,我主要用它來包裝一些擴(kuò)展方法,公共的工具類。

Swagger登場

做.net core開發(fā)的,相信Swagger的使用大家應(yīng)該都很熟悉了,不做過多的介紹,今天只先將其用上看看效果。

我單獨為Swagger新建了一個項目Meowv.Blog.Swagger,其實大可不必,直接寫在.HttpApi.Hosting中也是一樣的。

添加Volo.Abp.AspNetCore和Swashbuckle.AspNetCore包,引用實體層.Domain。

//Meowv.Blog.Swagger.csproj

netcoreapp3.1 <ProjectReference Include="..\Meowv.Blog.Domain\Meowv.Blog.Domain.csproj" />

添加模塊類MeowvBlogSwaggerModule.cs,依賴MeowvBlogDomainModule模塊,并且重寫ConfigureServices和OnApplicationInitialization方法,不知道這是什么的,可以看文檔:https://docs.abp.io/zh-Hans/abp/latest/Module-Development-Basics

然后新建一個擴(kuò)展類MeowvBlogSwaggerExtensions.cs,編寫兩個擴(kuò)展方法AddSwagger和UseSwaggerUI。

在AddSwagger方法中引用我們的XML文件,配置接口的名稱版本以及描述信息,在UseSwaggerUI方法中使用SwaggerUI,代碼如下:

//MeowvBlogSwaggerExtensions.cs
using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.OpenApi.Models;
using System;
using System.IO;

namespace Meowv.Blog.Swagger
{
public static class MeowvBlogSwaggerExtensions
{
public static IServiceCollection AddSwagger(this IServiceCollection services)
{
return services.AddSwaggerGen(options =>
{
options.SwaggerDoc(“v1”, new OpenApiInfo
{
Version = “1.0.0”,
Title = “我的接口啊”,
Description = “接口描述”
});

options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, "Meowv.Blog.HttpApi.xml"));options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, "Meowv.Blog.Domain.xml"));options.IncludeXmlComments(Path.Combine(AppContext.BaseDirectory, "Meowv.Blog.Application.Contracts.xml"));});}public static void UseSwaggerUI(this IApplicationBuilder app){app.UseSwaggerUI(options =>{options.SwaggerEndpoint($"/swagger/v1/swagger.json", "默認(rèn)接口");});} }

}

隨后便可以在模塊MeowvBlogDomainModule中引用了

//MeowvBlogSwaggerModule.cs
using Meowv.Blog.Domain;
using Microsoft.AspNetCore.Builder;
using Volo.Abp;
using Volo.Abp.Modularity;

namespace Meowv.Blog.Swagger
{
[DependsOn(typeof(MeowvBlogDomainModule))]
public class MeowvBlogSwaggerModule : AbpModule
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddSwagger();
}

public override void OnApplicationInitialization(ApplicationInitializationContext context){context.GetApplicationBuilder().UseSwagger().UseSwaggerUI();} }

}

最后在.HttpApi.Hosting層的的啟動模塊中引用一下。

//MeowvBlogHttpApiHostingModule.cs

[DependsOn(
typeof(AbpAspNetCoreMvcModule),
typeof(AbpAutofacModule),
typeof(MeowvBlogHttpApiModule),
typeof(MeowvBlogSwaggerModule),
typeof(MeowvBlogFrameworkCoreModule)
)]
public class MeowvBlogHttpApiHostingModule : AbpModule
{

}

Ctrl + Shift + B生成解決方案,Ctrl+F5打開 …/swagger/index.html 看看效果,上面有一個坑沒有填,不知道大家發(fā)現(xiàn)了沒有,Meowv.Blog.HttpApi.xml沒有生成,啟動是是會報錯的,大家按照之前的方法自行生成XML即可。

圖片

棒!預(yù)期已經(jīng)達(dá)到了。Swagger之所以想單獨創(chuàng)建一個項目是因為還涉及到很多內(nèi)容,如接口分組、JWT授權(quán)、還有Swagger文檔描述信息的Filter等。

項目中還剩下.BackgroundJobs層沒有處理,此層準(zhǔn)備集成Hangfire做一個定時任務(wù)處理的,后面會慢慢用起來的。

現(xiàn)在再回頭看看,項目是不是很清爽? 沒有亂七八糟的東西,有的只是我們需要的。

此時的層級目錄,以供參考。

圖片

項目中可能有許多不是很合理的地方,請酌情參考。因為大佬們都不愿意出來分享,所以我們渣渣只能做到這種程度,如果有錯誤歡迎指正,謝謝。

開源地址:https://github.com/Meowv/Blog/tree/blog_tutorial

總結(jié)

以上是生活随笔為你收集整理的基于 abp vNext 和 .NET Core 开发博客项目 - 完善与美化,Swagger登场的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。