ASP.NET Core入門チュートリアル9、ASP.NET Coreミドルウェア入門
6354 ワード
一、前言
1、この教程の主な内容 ASP.NET Coreミドルウェア紹介 カスタムASP.NET Coreミドルウェア実装要求チェック 2、このチュートリアルの環境情報
ソフトウェア/環境
説明
オペレーティングシステム
Windows 10
SDK
2.1.401
ASP.NET Core
2.1.3
MySQL
8.0.x
IDE
Visual Studio Code 1.32.3
エクスプローラ
Chrome 70
VSコードカード
バージョン#バージョン#
説明
C#
1.17.1
C#インテリジェントな感知を提供する.NET Coreデバッグ、コンパイルなど
vscdoe-solution-explorer
0.3.1
ソリューションビューの提供
このコードは以下のコードで調整されます.https://github.com/ken-io/asp...
3、前置き知識
必要な事前知識 C#委任(Delegate) http://www.runoob.com/csharp/... C#拡張方法 https://docs.microsoft.com/zh...
二、ASP.NET Coreミドルウェアの紹介
1、ASP.NET Coreミドルウェアの基本説明
ASP.NET Core MVCアプリケーションがKestrelからリクエストを受信すると、HttpContextが確立され、Applicationによってリクエストが処理されます.アプリケーションには、その要求を処理するチャネルがあります.これがASPです.NET Coreパイプは、通常、要求処理パイプと呼ばれます.
このパイプには、要求を秩序正しく処理する一連のコンポーネントがあり、ミドルウェアである.
図中の青い部分はシステム内蔵の比較的前のミドルウェアまたは私たちがカスタマイズしたミドルウェアと考えることができ、MVCは特殊なミドルウェアであり、通常は最後に置かれているので、ここでは単独で描く.
MVCミドルウェアの場合、要求されたURLがルーティングと一致する場合、後続のミドルウェアは有効になりません.だからMVCは通常最後に置かれます.
ASP.NET Coreには、認証、静的ファイル処理、MVCなどのミドルウェアが内蔵されています.各ミドルウェアは、リクエストを受信した後、次のミドルウェアによって処理されるか、結果を直接返すかを選択できます.例:認証ミドルウェア認証が通過しない場合、ログインページ に直接起動する.静的ファイルミドルウェアは、静的ファイルと判断する静的ファイル内容 を直接返す.
したがって、ミドルウェアは、パイプ内のリクエストプロセッサの処理を要求すると理解することができる.カスタムミドルウェアをパイプに登録することで、リクエストに介入することもできます.
2、ASP.NET Coreミドルウェアベース使用
プログラムでは,ミドルウェアは依頼に基づいて構築される.アプリケーション起動時にIApplicationBuilderを介してチャネルに登録します.
具体的には、起動クラス
三、ASPを使用する.NET Coreミドルウェア実装要求チェックアウト
もしあなたが開発したAPIが携帯電話のAppのためにサービスしているならば、あなたのAPIは必ず公網に暴露しなければなりません.もし誰かがAPIアドレスを手に入れて不法に要求したり、ユーザー情報を取得したり、データを改ざんしたりすると、ユーザーのプライバシー、データが損なわれます.これは安全ではありません.クライアントが要求するときに署名を携帯しなければならないようにし、サーバ側の認証(署名の検証)が通過してから放行することで、安全になります.
1、チェックマークミドルウェアの作成
プロジェクト
カスタムミドルウェアに重点を置いているため、すべてのチェックマークの論理は非常に簡単で、実際のプロジェクトで使用すれば、自分のニーズに合わせて調整することができます.
2、拡張方法の作成
ここでは、拡張方法により、
3、ミドルウェア登録/参照
起動クラス
拡張方法が少し余計だと思ったら、
ここで注意したいのは、MVCアプリであれば、MVCというミドルウェアを必ず最後の登録としてください.ミドルウェアは登録順に呼び出されるからです.MVCの後に置かれ、要求されたURLにも対応するルーティングが適切であれば、要求全体がMVCに引き継がれる.後ろのミドルウェアは呼び出されません.
4、チェックマークミドルウェアテスト
アプリケーションを起動し、異なる状況でのアクセス結果を検証します.
URL
Response
localhost:5001
token missing
localhost:5001?token=test
token error
localhost:5001?token=3D76FEA1D0ADD0C7639B73023436C6EA
Hello World ! -ken.io
テストを容易にするために、MD 5ハッシュの値をオンラインで生成できます.ttp://tool.chinaz.com/tools/md5.aspx
現在の分、例えば
四、備考本明細書のコード例 https://github.com/ken-io/asp... 本明細書では を参照
https://docs.microsoft.com/zh...拡張読書 https://www.cnblogs.com/artec...
この記事は、私の独立したブログに掲載されています.https://ken.io/note/asp.net-c...
1、この教程の主な内容
ソフトウェア/環境
説明
オペレーティングシステム
Windows 10
SDK
2.1.401
ASP.NET Core
2.1.3
MySQL
8.0.x
IDE
Visual Studio Code 1.32.3
エクスプローラ
Chrome 70
VSコードカード
バージョン#バージョン#
説明
C#
1.17.1
C#インテリジェントな感知を提供する.NET Coreデバッグ、コンパイルなど
vscdoe-solution-explorer
0.3.1
ソリューションビューの提供
このコードは以下のコードで調整されます.https://github.com/ken-io/asp...
3、前置き知識
必要な事前知識
二、ASP.NET Coreミドルウェアの紹介
1、ASP.NET Coreミドルウェアの基本説明
ASP.NET Core MVCアプリケーションがKestrelからリクエストを受信すると、HttpContextが確立され、Applicationによってリクエストが処理されます.アプリケーションには、その要求を処理するチャネルがあります.これがASPです.NET Coreパイプは、通常、要求処理パイプと呼ばれます.
このパイプには、要求を秩序正しく処理する一連のコンポーネントがあり、ミドルウェアである.
図中の青い部分はシステム内蔵の比較的前のミドルウェアまたは私たちがカスタマイズしたミドルウェアと考えることができ、MVCは特殊なミドルウェアであり、通常は最後に置かれているので、ここでは単独で描く.
MVCミドルウェアの場合、要求されたURLがルーティングと一致する場合、後続のミドルウェアは有効になりません.だからMVCは通常最後に置かれます.
ASP.NET Coreには、認証、静的ファイル処理、MVCなどのミドルウェアが内蔵されています.各ミドルウェアは、リクエストを受信した後、次のミドルウェアによって処理されるか、結果を直接返すかを選択できます.例:
したがって、ミドルウェアは、パイプ内のリクエストプロセッサの処理を要求すると理解することができる.カスタムミドルウェアをパイプに登録することで、リクエストに介入することもできます.
2、ASP.NET Coreミドルウェアベース使用
プログラムでは,ミドルウェアは依頼に基づいて構築される.アプリケーション起動時にIApplicationBuilderを介してチャネルに登録します.
具体的には、起動クラス
Startup.cs
を参照してください.public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc(routes =>
{
//
routes.MapRoute(
name: "Default",
template: "{controller}/{action}",
defaults: new { controller = "Home", action = "Index" }
);
});
}
UseDeveloperExceptionPage
、UseMvc
は、いずれもインターフェースIApplicationBuilder
の拡張方法である.三、ASPを使用する.NET Coreミドルウェア実装要求チェックアウト
もしあなたが開発したAPIが携帯電話のAppのためにサービスしているならば、あなたのAPIは必ず公網に暴露しなければなりません.もし誰かがAPIアドレスを手に入れて不法に要求したり、ユーザー情報を取得したり、データを改ざんしたりすると、ユーザーのプライバシー、データが損なわれます.これは安全ではありません.クライアントが要求するときに署名を携帯しなければならないようにし、サーバ側の認証(署名の検証)が通過してから放行することで、安全になります.
1、チェックマークミドルウェアの作成
プロジェクト
Ken.Tutorial.Web
にディレクトリMiddlewares
を作成し、クラスTokenCheckMiddleware.cs
を作成します.using System;
using System.Security.Cryptography;
using System.Text;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Http;
namespace Ken.Tutorial.Web.Middlewares
{
public class TokenCheckMiddleware
{
private readonly RequestDelegate _next;
public TokenCheckMiddleware(RequestDelegate requestDelegate)
{
this._next = requestDelegate;
}
public Task Invoke(HttpContext context)
{
// Url token, Form token
var token = context.Request.Query["token"].ToString() ?? context.Request.Form["token"].ToString();
if (string.IsNullOrWhiteSpace(token))
{
// token , token missing
return context.Response.WriteAsync("token missing");
}
// 1
var minute0 = DateTime.Now.AddMinutes(-1).ToString("yyyy-MM-dd HH:mm");
var minute = DateTime.Now.ToString("yyyy-MM-dd HH:mm");
// token MD5 ,
if (token == MD5Hash(minute) || token == MD5Hash(minute0))
{
return _next.Invoke(context);
}
// token token error
return context.Response.WriteAsync("token error");
}
public string MD5Hash(string value)
{
using (var md5 = MD5.Create())
{
var result = md5.ComputeHash(Encoding.ASCII.GetBytes(value));
var strResult = BitConverter.ToString(result);
return strResult.Replace("-", "");
}
}
}
}
カスタムミドルウェアに重点を置いているため、すべてのチェックマークの論理は非常に簡単で、実際のプロジェクトで使用すれば、自分のニーズに合わせて調整することができます.
2、拡張方法の作成
Middlewares
ディレクトリの下でクラスを新規作成:MiddlewareExtension.cs
using Microsoft.AspNetCore.Builder;
namespace Ken.Tutorial.Web.Middlewares
{
public static class MiddlewareExtension
{
public static IApplicationBuilder UseTokenCheck(this IApplicationBuilder builder)
{
return builder.UseMiddleware();
}
}
}
ここでは、拡張方法により、
TokenCheckMiddleware
をインタフェースIApplicationBuilder
に掛ける3、ミドルウェア登録/参照
起動クラス
Startup.cs
のConfigure
メソッドにおける中間部品の登録/参照public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//
app.UseTokenCheck();
app.UseMvc(routes =>
{
//
});
}
拡張方法が少し余計だと思ったら、
UseMiddleware
方法で直接登録することもできますpublic void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
//
app.UseMiddleware();
app.UseMvc(routes =>
{
//
});
}
ここで注意したいのは、MVCアプリであれば、MVCというミドルウェアを必ず最後の登録としてください.ミドルウェアは登録順に呼び出されるからです.MVCの後に置かれ、要求されたURLにも対応するルーティングが適切であれば、要求全体がMVCに引き継がれる.後ろのミドルウェアは呼び出されません.
4、チェックマークミドルウェアテスト
アプリケーションを起動し、異なる状況でのアクセス結果を検証します.
URL
Response
localhost:5001
token missing
localhost:5001?token=test
token error
localhost:5001?token=3D76FEA1D0ADD0C7639B73023436C6EA
Hello World ! -ken.io
テストを容易にするために、MD 5ハッシュの値をオンラインで生成できます.ttp://tool.chinaz.com/tools/md5.aspx
現在の分、例えば
2019-03-27 23:23
をMD 5を介してオンラインで生成すると3D76FEA1D0ADD0C7639B73023436C6EA
になります.四、備考
https://docs.microsoft.com/zh...
この記事は、私の独立したブログに掲載されています.https://ken.io/note/asp.net-c...