これは.NET 7を使用して完全に実装されたWeb APIアプリケーションをセットアップするためのテンプレートです。
読みやすくするために毎日の間隔でファイルを変更する完全にカスタマイズ可能で自動化されたログ。
Appsettings.jsonファイルで値を編集してパーソナライズします。
バージョンされたサービス
ユーザー資格情報の検証
カスタマイズ可能なパスワード検証
Appsettings.jsonファイルで値を編集してパーソナライズします。
電子メールの検証
ユーザー名の検証
JWT認証
役割ベースの承認
管理者およびメンバーアカウント
管理者のみのサービス
デフォルトの管理者ユーザーアカウント
Appsettings.jsonファイルで値を編集してパーソナライズします。
データベース対応
contents目次に戻ります
contents目次に戻ります
リポジトリをクローンします
テンプレートのフォルダーに端子を開きます
cd webapi-fullプロジェクト作成に使用するテンプレートをインストールします
Windows用
dotnet new install .MacOS / Linux用
dotnet new install ./更新されたバージョンをインストールするには、1つのバージョンをアンインストールする必要がある場合があります。
この不便を避けるために、上記のコマンドに
--forceオプションを追加するだけです。
プロジェクトを作成します
dotnet new webapi-fullこのコマンドは、プロジェクトのフォルダーとして使用されるため、このコマンドを空のディレクトリに実行することを忘れないでください。
必要に応じてディレクトリに名前を付けるには、プロジェクトの名前空間がその名前を継承します。
移行を追加して、データベースを作成します
dotnet ef migrations add CreateUserそして
dotnet ef database updateエンティティフレームワークがインストールされていない場合は、最初に次のことを実行します。
dotnet tool install --global dotnet-ef
プロジェクトを実行し、Swaggerを使用して試してみてください
dotnet watch runcontents目次に戻ります
私が含める2つのデータベース管理システムがあります。
もちろん、それ以上ありますが、これらは私が最もよく働いているものです。
その他のデータプロバイダーについては、公式のEFコアドキュメントをご覧ください。
エンティティフレームワークコネクタパッケージをインストールします。
dotnet add package Microsoft.EntityFrameworkCore.SqlServerappsettings.jsonの接続文字列を次のようなものに変更します。
{
"ConnectionStrings" : {
"Demo" : " Server=<SERVER_NAME>;Database=<DATABASE_NAME>;Trusted_Connection=true;MultipleActiveResultSets=true;Trust Server Certificate=true "
},
...
} ApplicationDbContextサービスを変更して、 SQL Serverを使用します。
これはプログラム内で行われます。cs。
builder . Services . AddDbContext < ApplicationDbContext > ( options =>
options . UseSqlServer ( builder . Configuration . GetConnectionString ( "Demo" ) )
) ;エンティティフレームワークコネクタパッケージをインストールします。
dotnet add package Npgsql.EntityFrameworkCore.PostgreSQLappsettings.jsonの接続文字列を次のようなものに変更します。
{
"ConnectionStrings" : {
"Demo" : " Host=localhost:5432;Database=<DATABASE>;Username=<USERNAME> "
},
...
} ApplicationDbContextサービスを変更して、 PostgreSQLを使用します。
これはプログラム内で行われます。cs。
builder . Services . AddDbContext < ApplicationDbContext > ( options =>
options . UseNpgsql ( builder . Configuration . GetConnectionString ( "Demo" ) )
) ;PostgreSQLには、このソリューションを実行するための追加のステップが必要です。
このDBMSがbitタイプをサポートしていないため、クラスIndexedObjectのIs_Deletedプロパティを変更します。
[ Required ]
[ Column ( "Is_Deleted" ) ]
[ JsonIgnore ]
public bool IsDeleted { get ; set ; } = false ;ステップ3のコードの直後に、次の内部プログラムを追加します。
AppContext . SetSwitch ( "Npgsql.EnableLegacyTimestampBehavior" , true ) ;
AppContext . SetSwitch ( "Npgsql.DisableDateTimeInfinityConversions" , true ) ;これは、greが
DateTimeプロパティをサポートするために不可欠です。
contents目次に戻ります
ユーザーロールは、アプリが動作する2つの場所で定義されます。
Role列挙
この列挙は、アプリの利用可能な役割と、各役割のインデックスを保持します。
このインデックスはアプリの機能にとって重要であり、単純な方法で機能します。インデックスが高いほど、役割の特権が高くなります。
デフォルトの列挙には、次の値が保持されます。
{
"User" : 1 ,
"Admin" : 2
}管理者はより高い指標であることに注意してください。
内部プログラム.cs enum値をアプリで使用する「ポリシー」に変換します。
builder . Services . AddAuthorization ( options =>
{
options . AddPolicy ( "admin" , policy => policy . Requirements . Add ( new RoleRequirement ( Role . Admin ) ) ) ;
options . AddPolicy ( "user" , policy => policy . Requirements . Add ( new RoleRequirement ( Role . User ) ) ) ;
} ) ;列挙に役割を追加した後、ここにも追加されたことが必須です。
ユーザーのサービスを認証するには、 [Authorize]属性を簡単に追加します。
役割が機能するための許可も同様に宣言されることが重要です。
[ Authorize ( Policy = "user" ) ]
[ HttpGet ]
public IActionResult GetLoggedUser ( )
{
User user = this . userUtils . GetLoggedUser ( this . User ) ;
Log . Information ( $ "Retrieved user ' { user . UserName } '." ) ;
return Ok ( user ) ;
}これは、任意のユーザーが使用できるサービスです。
それはまだ公共サービスではなく、それを使用するためにログインする必要があることを忘れないでください。特別な役割が必要ないということです。
Appsettings.json内には、デフォルトの管理者の資格情報と重要な情報があります。
アプリケーションはこの情報を使用して、データベースの作成でユーザーを自動的に作成します。
データは、次のJSONの形式で宣言されます。
"DefaultAdmin" : {
"Email" : " [email protected] " ,
"UserName" : " admin_user " ,
"FirstName" : " Admin " ,
"LastName" : " User " ,
"Password" : " 123 "
}先に進む前に、少なくともメールとパスワードを変更することをお勧めします。
contents目次に戻ります
ユーザー名の検証は簡単ですが、意見があります。
ユーザー名:
_-ルールのリスト全体を返し、無効なものをマークするために、フォーマットされたメッセージはHTML <ul></ul>タグとして返されます。
より具体的には、ここに検証が失敗した例が次のとおりです。
< ul class =' username-validation ' >
< li class =' valid ' > Username cannot contain whitespaces. </ li >
< li class =' invalid ' > Username cannot exceed 40 characters. </ li >
< li class =' valid ' > Username must be at least 6 characters long. </ li >
< li class =' valid ' > The only allowed special characters are the following: -, _ </ li >
< li class =' valid ' > Username must be lowercase. </ li >
</ ul >このバリデーターを編集するには、ルールがハードコードされているため、コードを編集する必要があります。これは、標準に続くユーザー名の検証のために発生しました。
上記の例では、最大長の40文字を施行するものを除き、すべてのバリデーターが合格しました。
電子メールの検証は非常に簡単です。
ユーザーが提供するすべてのアドレスは、形式に固執する限り有効です。
私はこのバリデーターを変更することには意味がありませんが、あなたはあなたのコードで自由にそうすることができます。
ValidateEmailとValidateUserNameメソッドの両方は、IUserUtilsインターフェイスの一部として定義されます。
パスワード検証は最も複雑で、簡単にカスタマイズ可能であるため、そのルールはappsettings.jsonファイルで定義されています。
アプリの世代では、前述のファイルにこの部分があります。
"PasswordValidator" : {
"AllowedNonAlphanumeric" : " !@#$._- " ,
"MaxLength" : 16 ,
"MinLength" : 8 ,
"RequireDigit" : false ,
"RequireLowercase" : true ,
"RequireNonAlphanumeric" : true ,
"RequireUppercase" : true
},これがすることは次のとおりです。
このルールは、パスワード文字列が許可されている許可されていない非アルファン次元文字を設定します。
キャラクターは何でも分離してはなりません。それらをすべてJSON文字列に入れてください。
非アルファン次元を許可しないようにするには、値を空の文字列にします。
最大の長さは、その名前が意味することを行います。
数字に設定すると、パスワード文字列は長さの多くの文字を超えることはできません。
パスワードの最大長を施行するのを停止するには、値を0に設定します。
最大長のカウンターパートのように機能します。
パスワードは、このフィールドに設定された番号よりも少ない文字を持つことはできません。
パスワードの最小長さの実施を停止するには、値を0に設定します。
これはBoolean変数です。
Trueに設定されている場合、ユーザーはパスワードに少なくとも1桁( [0-9] )を使用する必要があります。
このルールを実施しないようにするには、その値を
falseに設定します。
これはBoolean変数です。
Trueに設定した場合、ユーザーはパスワードに少なくとも1つの小文字を使用する必要があります。
このルールを実施しないようにするには、その値を
falseに設定します。
これはBoolean変数です。
Trueに設定されている場合、ユーザーはパスワードに許可されている少なくとも1つの許可されていない文字を使用する必要があります。
このルールを実施しないようにするには、その値を
falseに設定します。
これはBoolean変数です。
Trueに設定されている場合、ユーザーはパスワードに少なくとも1つの大文字を使用する必要があります。
このルールを実施しないようにするには、その値を
falseに設定します。
また、デフォルトでは、パスワードにはWhitespace文字を含めることはできません。
ルールのリスト全体を返し、無効なものをマークするために、フォーマットされたメッセージはHTML <ul></ul>タグとして返されます。
より具体的には、ここに検証が失敗した例が次のとおりです。
< ul class =' password-validation ' >
< li class =' valid ' > Password cannot contain whitespaces. </ li >
< li class =' invalid ' > The only allowed special characters are the following: !, @, #, $, ., _, - </ li >
< li class =' valid ' > Password cannot exceed 16 characters. </ li >
< li class =' invalid ' > Password must be at least 8 characters long. </ li >
< li class =' valid ' > Password must contain at least one digit. </ li >
< li class =' valid ' > Password must contain at least one lowercase letter. </ li >
</ ul >上記の例では、パスワードはほとんど有効でしたが、それは次のとおりでした。
- 許可されていない非アルファン次元のキャラクターが含まれていました
- 短すぎました。
パスワード検証を編集するには、3つのことを行う必要があります。
appsettings.jsonファイル内のルールを編集します。
これらのルールに一致するように、 PasswordValidatorクラスを編集します。
既存のルールの値を変更するだけで、それは必要ありません。
提供された実装クラス内または独自の作成により、 IPasswordUtilsインターフェイスの一部として宣言された検証のロジックを編集します。
既存のルールの値を変更するだけで、それは必要ありません。
contents目次に戻ります
テンプレートをアンインストールするには、次のことを実行します。
テンプレートのフォルダーに端子を開きます
cd webapi-full実行してテンプレートをアンインストールします。
Windows用
dotnet new uninstall .MacOS / Linux用
dotnet new uninstall ./contents目次に戻ります
dotnet-template-webapi-fullは、 GNU General Public License v3.0に基づいてライセンスされています。
contents目次に戻ります