เราสามารถกำหนดค่ามิดเดิลแวร์ในวิธี Configure ของคลาส Startup โดยใช้อินสแตนซ์ IapplicationBuilder
Run() เป็นวิธีการขยายบนอินสแตนซ์ IApplicationBuilder ซึ่งเพิ่มเทอร์มินัลมิดเดิลแวร์ไปยังไปป์ไลน์คำขอของแอปพลิเคชัน
เมธอด Run เป็นวิธีการขยายบน IApplicationBuilder และยอมรับพารามิเตอร์ของ RequestDelegate
ลายเซ็นของวิธีการเรียกใช้
public static void Run(this IApplicationBuilder app, RequestDelegate handler)
ลายเซ็นของ RequestDelegate
public delegate Task RequestDelegate(HttpContext context);
ตัวอย่าง
public class Startup{
public Startup(){
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env,
ILoggerFactory loggerFactory){
//configure middleware using IApplicationBuilder here..
app.Run(async (context) =>{
await context.Response.WriteAsync("Hello World!");
});
// other code removed for clarity..
}
} ฟังก์ชัน MyMiddleware ด้านบนไม่ใช่แบบอะซิงโครนัส ดังนั้นจะบล็อกเธรดจนกว่าจะเสร็จสิ้นการดำเนินการ ดังนั้น ทำให้เป็นแบบอะซิงโครนัสโดยใช้ async andawait เพื่อปรับปรุงประสิทธิภาพและความสามารถในการปรับขนาด
public class Startup{
public Startup(){
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env){
app.Run(MyMiddleware);
}
private async Task MyMiddleware(HttpContext context){
await context.Response.WriteAsync("Hello World! ");
}
} กำหนดค่ามิดเดิลแวร์หลายตัวโดยใช้ Run()
ข้อมูลต่อไปนี้จะรันเมธอด Run แรกเสมอ และจะไม่มีวันไปถึงเมธอด Run ที่สอง
public void Configure(IApplicationBuilder app, IHostingEnvironment env){
app.Run(async (context) =>{
await context.Response.WriteAsync("1st Middleware");
});
// the following will never be executed
app.Run(async (context) =>{
await context.Response.WriteAsync(" 2nd Middleware");
});
} ใช้
หากต้องการกำหนดค่ามิดเดิลแวร์หลายตัว ให้ใช้วิธีการขยาย Use() มันคล้ายกับวิธีการ Run() ยกเว้นว่ามันรวมพารามิเตอร์ถัดไปเพื่อเรียกใช้มิดเดิลแวร์ตัวถัดไปในลำดับเหล่านี้
public void Configure(IApplicationBuilder app, IHostingEnvironment env){
app.Use(async (context, next) =>{
await context.Response.WriteAsync("1st Middleware!");
await next();
});
app.Run(async (context) =>{
await context.Response.WriteAsync("2nd Middleware");
});
}