วิธีสร้างข้อ จำกัด เส้นทางใน ASP.NET Core
ข้อ จำกัด เส้นทางใน ASP.NET Core ใช้เพื่อกรองหรือ จำกัด ข้อมูลที่ไม่ต้องการไม่ให้เข้าถึงการทำงานของคอนโทรลเลอร์ของคุณ สำหรับไพรเมอร์เกี่ยวกับการกำหนดเส้นทางใน ASP.NET Core คุณสามารถอ้างถึงบทความก่อนหน้าของฉันเกี่ยวกับการกำหนดเส้นทางตามแอตทริบิวต์เทียบกับการกำหนดเส้นทางตามแบบแผนใน ASP.NET Core บทความนี้เป็นมากกว่าข้อมูลพื้นฐานในการสำรวจการดำเนินการขั้นสูงโดยใช้ข้อ จำกัด ของเส้นทาง
ในการทำงานกับตัวอย่างโค้ดที่ให้ไว้ในบทความนี้คุณควรติดตั้ง Visual Studio 2019 ในระบบของคุณ หากคุณยังไม่มีสำเนาคุณสามารถดาวน์โหลด Visual Studio 2019 ได้ที่นี่
สร้างโครงการ ASP.NET Core MVC ใน Visual Studio 2019
ก่อนอื่นมาสร้างโครงการ ASP.Net Core ใน Visual Studio 2019 สมมติว่ามีการติดตั้ง Visual Studio 2019 ในระบบของคุณให้ทำตามขั้นตอนที่ระบุไว้ด้านล่างเพื่อสร้างโครงการ ASP.Net Core ใหม่ใน Visual Studio
- เปิด Visual Studio IDE
- คลิกที่ "สร้างโครงการใหม่"
- ในหน้าต่าง“ สร้างโครงการใหม่” เลือก“ ASP.NET Core Web Application” จากรายการเทมเพลตที่แสดง
- คลิกถัดไป
- ในหน้าต่าง "กำหนดค่าโครงการใหม่ของคุณ" ระบุชื่อและตำแหน่งของโครงการใหม่
- เลือกที่จะเลือกช่องทำเครื่องหมาย“ วางโซลูชันและโครงการในไดเรกทอรีเดียวกัน” ขึ้นอยู่กับความต้องการ
- คลิกสร้าง
- ในหน้าต่าง“ Create a New ASP.NET Core Web Application” ที่แสดงถัดไปให้เลือก. NET Core เป็นรันไทม์และ ASP.NET Core 3.1 (หรือใหม่กว่า) จากรายการดรอปดาวน์ที่ด้านบน
- เลือก“ Web Application (Model-View-Controller)” เป็นเทมเพลตโครงการเพื่อสร้างแอปพลิเคชัน ASP.NET Core MVC ใหม่
- ตรวจสอบให้แน่ใจว่าไม่มีการเลือกช่องทำเครื่องหมาย "เปิดใช้งานการสนับสนุน Docker" และ "กำหนดค่าสำหรับ HTTPS" เนื่องจากเราจะไม่ใช้คุณลักษณะเหล่านั้นที่นี่
- ตรวจสอบให้แน่ใจว่าการรับรองความถูกต้องถูกตั้งค่าเป็น“ ไม่มีการพิสูจน์ตัวตน” เนื่องจากเราจะไม่ใช้การพิสูจน์ตัวตนด้วย
- คลิกสร้าง
การทำตามขั้นตอนเหล่านี้จะสร้างโปรเจ็กต์ ASP.NET Core MVC ใหม่ใน Visual Studio 2019 เราจะใช้โปรเจ็กต์นี้ในส่วนด้านล่างเพื่อแสดงให้เห็นว่าเราสามารถใช้ข้อ จำกัด เส้นทางใน ASP.NET Core 3.1 ได้อย่างไร
คลาส RouteCollection ใน ASP.NET Core
คลาส RouteTable ใน ASP.NET Core มีคุณสมบัติที่ชื่อ Routes ซึ่งเก็บเส้นทางทั้งหมดเป็น RouteCollection คลาส RouteCollection มีเมธอดส่วนขยายบางอย่างที่สามารถใช้เพื่อแม็พเส้นทางหรือละเว้นได้
MapRoute เป็นวิธีการโอเวอร์โหลดที่ยอมรับข้อ จำกัด เป็นพารามิเตอร์ คุณสามารถใช้สิ่งนี้เพื่อส่งผ่านข้อ จำกัด ของคุณไปยังเส้นทาง ต่อไปนี้เป็นการประกาศเมธอด MapRoute
แผนที่เส้นทางแบบคงที่สาธารณะ (เส้นทาง RouteCollection นี้ชื่อสตริงสตริง url, ค่าเริ่มต้นของวัตถุ, ข้อ จำกัด ของวัตถุ);
อินเทอร์เฟซ IRouteConstraint ใน ASP.NET Core
อินเทอร์เฟซ IRouteConstraint เป็นสัญญาที่มีการประกาศเพียงวิธีเดียวที่ชื่อ Match ต้องขยายอินเทอร์เฟซนี้โดยคลาสและใช้เมธอด Match เพื่อตรวจสอบว่าพารามิเตอร์ URL เฉพาะถูกต้องสำหรับข้อ จำกัด หรือไม่ นี่คือวิธีกำหนดอินเทอร์เฟซ IRouteConstraint:
เนมสเปซ Microsoft.AspNetCore.Routing{
อินเทอร์เฟซสาธารณะ IRouteConstraint
{
การแข่งขันบูล (
HttpContext httpContext,
เส้นทาง IRouter
สตริง routeKey
ค่า RouteValueDictionary
RouteDirection routeDirection);
}
}
พจนานุกรม ConstraintMap ใน ASP.NET Core
ConstraintMap คือพจนานุกรมที่มีรายการข้อ จำกัด เส้นทางที่แมปคีย์ข้อ จำกัด เส้นทางกับการใช้งาน IRouteConstraint ข้อมูลโค้ดด้านล่างนี้แสดงให้เห็นว่าคุณสามารถเพิ่มข้อ จำกัด ที่กำหนดเองลงในพจนานุกรมนี้ได้อย่างไร
โมฆะสาธารณะ ConfigureServices (บริการ IServiceCollection){
services.Configure (routeOptions =>
{
routeOptions.ConstraintMap.Add ("emailconstraint", typeof (EmailRouteContraint));
});
}
ใช้วิธี IRouteConstraint Match ใน ASP.NET Core
ในการสร้างข้อ จำกัด เส้นทางที่กำหนดเองคุณควรสร้างคลาสที่ขยายอินเทอร์เฟซ IRouteConstraint และใช้วิธีการจับคู่ ข้อ จำกัด สามารถใช้เพื่อขัดขวางคำขอที่เข้ามาที่ไม่ต้องการและป้องกันไม่ให้มีการจับคู่เส้นทางเว้นแต่จะเป็นไปตามเงื่อนไขเฉพาะ ตัวอย่างเช่นคุณอาจต้องการให้แน่ใจว่าพารามิเตอร์ที่ส่งผ่านไปยังวิธีการดำเนินการเป็นจำนวนเต็มเสมอ
วิธีการจับคู่ยอมรับพารามิเตอร์ต่อไปนี้:
- HttpContext - สรุปข้อมูลเฉพาะ HTTP ทั้งหมดเกี่ยวกับคำขอ
- IRouter - แสดงถึงเราเตอร์ที่จะใช้ข้อ จำกัด
- RouteKey - แสดงถึงพารามิเตอร์เส้นทางที่กำลังตรวจสอบความถูกต้อง
- RouteDirection - enum ที่มีสองค่า ได้แก่ IncomingRequest และ UrlGeneration และใช้เพื่อระบุว่า URL กำลังประมวลผลจากคำขอ HTTP หรือสร้าง URL
- RouteValues - มีพารามิเตอร์ URL
โครงสร้างของข้อ จำกัด เส้นทางที่กำหนดเองใน ASP.NET Core
นี่คือตัวอย่างโครงสร้างของข้อ จำกัด เส้นทางที่กำหนดเอง:
CustomRouteConstraint คลาสสาธารณะ: IRouteConstraint{
การจับคู่บูลสาธารณะ (HttpContext httpContext เส้นทาง IRouter
สตริง routeKey ค่า RouteValueDictionary
RouteDirection เส้นทางทิศทาง)
{
โยน NotImplementedException ใหม่ ();
}
}
ตัวอย่างข้อ จำกัด เส้นทางที่กำหนดเองใน ASP.NET Core
ตอนนี้ให้เราใช้ข้อ จำกัด เส้นทางที่กำหนดเองซึ่งสามารถตรวจสอบรหัสอีเมลได้ ก่อนอื่นให้สร้างคลาสที่ขยายอินเทอร์เฟซ IRouteConstraint และใช้เมธอด Match ข้อมูลโค้ดต่อไปนี้แสดงคลาสข้อ จำกัด เส้นทางแบบกำหนดเองชื่อ EmailRouteContraint ที่ขยายอินเทอร์เฟซ IRouteConstraint
EmailRouteContraint ระดับสาธารณะ: IRouteConstraint{
การจับคู่บูลสาธารณะ (HttpContext httpContext เส้นทาง IRouter
สตริง routeKey ค่า RouteValueDictionary
RouteDirection เส้นทางทิศทาง)
{
กลับจริง;
}
}
รายการรหัสต่อไปนี้แสดงคลาส EmailRouteConstraint ที่ใช้วิธีการจับคู่
EmailRouteContraint ระดับสาธารณะ: IRouteConstraint{
การจับคู่บูลสาธารณะ (HttpContext httpContext เส้นทาง IRouter
สตริง routeKey ค่า RouteValueDictionary
RouteDirection เส้นทางทิศทาง)
{
ถ้า (values.TryGetValue (routeKey ออก var routeValue))
{
var parameterValueString = Convert ToString (routeValue,
CultureInfo.InvariantCulture);
ส่งคืน IsEmailAddressValid (parameterValueString);
}
กลับเท็จ
}
บูลส่วนตัว IsEmailAddressValid (string emailAddress)
{
กลับจริง;
}
}
โปรดสังเกตว่าเมธอด IsEmailAddressValid เพียงแค่ส่งคืน "true" ฉันฝากไว้ให้คุณเขียนรหัสที่จำเป็นสำหรับการตรวจสอบที่อยู่อีเมล
ลงทะเบียนข้อ จำกัด เส้นทางแบบกำหนดเองใน ASP.NET Core
คุณควรลงทะเบียนข้อ จำกัด เส้นทางที่กำหนดเองของคุณกับระบบเส้นทางในเมธอด ConfigureServices ของคลาส Startup ข้อมูลโค้ดต่อไปนี้แสดงให้เห็นถึงสิ่งนี้
โมฆะสาธารณะ ConfigureServices (บริการ IServiceCollection){
services.AddControllersWithViews ();
services.Configure (routeOptions =>
{
routeOptions.ConstraintMap.Add ("ERC",
typeof (EmailRouteContraint));
});
}
คุณควรกำหนดค่าข้อ จำกัด เส้นทางที่กำหนดเองของคุณในวิธีกำหนดค่าของคลาสเริ่มต้นตามที่แสดงในข้อมูลโค้ดด้านล่าง
app.UseEndpoints (จุดสิ้นสุด =>{
endpoints.MapControllerRoute (
ชื่อ: "ค่าเริ่มต้น",
ข้อ จำกัด : ใหม่ {ERC = new EmailRouteContraint ()},
รูปแบบ: "{controller = Home} / {action = Index} / {id?}");
});
และนั่นแหล่ะ ตอนนี้คุณสามารถระบุข้อ จำกัด ในคอนโทรลเลอร์หรือวิธีการดำเนินการของคุณและเริ่มใช้แอปพลิเคชันได้
รันไทม์ ASP.NET Core ตรวจสอบความถูกต้องว่ารูปแบบและเส้นทางที่กำหนดไว้ตรงกับรูปแบบและค่าของคำขอที่เข้ามาหรือไม่ ตรรกะการตรวจสอบของข้อ จำกัด ถูกกำหนดไว้ในวิธีการจับคู่ของข้อ จำกัด เส้นทางที่กำหนดเองของคุณ คุณสามารถใช้ประโยชน์จากข้อ จำกัด เพื่อหลีกเลี่ยงการร้องขอที่ไม่จำเป็นรวมทั้งตรวจสอบค่าเส้นทางก่อนที่คำขอจะถูกส่งไปยังวิธีการดำเนินการ
วิธีทำเพิ่มเติมใน ASP.NET Core:
- วิธีจัดการความลับของผู้ใช้ใน ASP.NET Core
- วิธีสร้างแอปพลิเคชัน gRPC ใน ASP.NET Core
- วิธีเปลี่ยนเส้นทางคำขอใน ASP.NET Core
- วิธีใช้การกำหนดเส้นทางแอตทริบิวต์ใน ASP.NET Core
- วิธีการส่งพารามิเตอร์ไปยังวิธีการดำเนินการใน ASP.NET Core MVC
- วิธีใช้ API Analyzers ใน ASP.NET Core
- วิธีใช้โทเค็นข้อมูลเส้นทางใน ASP.NET Core
- วิธีใช้การกำหนดเวอร์ชัน API ใน ASP.NET Core
- วิธีใช้ Data Transfer Objects ใน ASP.NET Core 3.1
- วิธีจัดการข้อผิดพลาด 404 ใน ASP.NET Core MVC
- วิธีใช้การฉีดการพึ่งพาในตัวกรองการดำเนินการใน ASP.NET Core 3.1
- วิธีใช้รูปแบบตัวเลือกใน ASP.NET Core
- วิธีใช้ endpoint Routing ใน ASP.NET Core 3.0 MVC
- วิธีการส่งออกข้อมูลไปยัง Excel ใน ASP.NET Core 3.0
- วิธีใช้ LoggerMessage ใน ASP.NET Core 3.0
- วิธีส่งอีเมลใน ASP.NET Core
- วิธีบันทึกข้อมูลไปยัง SQL Server ใน ASP.NET Core
- วิธีกำหนดเวลางานโดยใช้ Quartz.NET ใน ASP.NET Core
- วิธีการส่งคืนข้อมูลจาก ASP.NET Core Web API
- วิธีจัดรูปแบบข้อมูลตอบกลับใน ASP.NET Core
- วิธีใช้ ASP.NET Core Web API โดยใช้ RestSharp
- วิธีดำเนินการ async โดยใช้ Dapper
- วิธีใช้แฟล็กฟีเจอร์ใน ASP.NET Core
- วิธีใช้แอ็ตทริบิวต์ FromServices ใน ASP.NET Core
- วิธีทำงานกับคุกกี้ใน ASP.NET Core
- วิธีการทำงานกับไฟล์คงที่ใน ASP.NET Core
- วิธีใช้ URL Rewriting Middleware ใน ASP.NET Core
- วิธีใช้การ จำกัด อัตราใน ASP.NET Core
- วิธีใช้ Azure Application Insights ใน ASP.NET Core
- การใช้คุณสมบัติ NLog ขั้นสูงใน ASP.NET Core
- วิธีจัดการข้อผิดพลาดใน ASP.NET Web API
- วิธีใช้การจัดการข้อยกเว้นส่วนกลางใน ASP.NET Core MVC
- วิธีจัดการค่า null ใน ASP.NET Core MVC
- การกำหนดเวอร์ชันขั้นสูงใน ASP.NET Core Web API
- วิธีการทำงานกับบริการของผู้ปฏิบัติงานใน ASP.NET Core
- วิธีใช้ Data Protection API ใน ASP.NET Core
- วิธีใช้มิดเดิลแวร์แบบมีเงื่อนไขใน ASP.NET Core
- วิธีการทำงานกับสถานะเซสชันใน ASP.NET Core
- วิธีเขียนคอนโทรลเลอร์ที่มีประสิทธิภาพใน ASP.NET Core