วิธีสร้างข้อ จำกัด เส้นทางใน 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

  1. เปิด Visual Studio IDE
  2. คลิกที่ "สร้างโครงการใหม่"
  3. ในหน้าต่าง“ สร้างโครงการใหม่” เลือก“ ASP.NET Core Web Application” จากรายการเทมเพลตที่แสดง
  4. คลิกถัดไป
  5. ในหน้าต่าง "กำหนดค่าโครงการใหม่ของคุณ" ระบุชื่อและตำแหน่งของโครงการใหม่
  6. เลือกที่จะเลือกช่องทำเครื่องหมาย“ วางโซลูชันและโครงการในไดเรกทอรีเดียวกัน” ขึ้นอยู่กับความต้องการ
  7. คลิกสร้าง
  8. ในหน้าต่าง“ Create a New ASP.NET Core Web Application” ที่แสดงถัดไปให้เลือก. NET Core เป็นรันไทม์และ ASP.NET Core 3.1 (หรือใหม่กว่า) จากรายการดรอปดาวน์ที่ด้านบน
  9. เลือก“ Web Application (Model-View-Controller)” เป็นเทมเพลตโครงการเพื่อสร้างแอปพลิเคชัน ASP.NET Core MVC ใหม่ 
  10. ตรวจสอบให้แน่ใจว่าไม่มีการเลือกช่องทำเครื่องหมาย "เปิดใช้งานการสนับสนุน Docker" และ "กำหนดค่าสำหรับ HTTPS" เนื่องจากเราจะไม่ใช้คุณลักษณะเหล่านั้นที่นี่
  11. ตรวจสอบให้แน่ใจว่าการรับรองความถูกต้องถูกตั้งค่าเป็น“ ไม่มีการพิสูจน์ตัวตน” เนื่องจากเราจะไม่ใช้การพิสูจน์ตัวตนด้วย
  12. คลิกสร้าง

การทำตามขั้นตอนเหล่านี้จะสร้างโปรเจ็กต์ 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