เป็นไปได้ไหมที่จะเปิดใช้งานการตรวจสอบตัวช่วยแท็กแบบคงที่

ตัวอย่างเช่น ฉันสามารถเขียนโค้ดนี้ในเทมเพลต mvc เริ่มต้นได้

<a asp-area="" asp-route-returnUrlFoo="foo" 
   asp-controller="Account" asp-action="RegisterFoo">Register</a>

และมันจะสร้าง URL ที่ไม่ถูกต้อง

/Account/RegisterFoo?returnUrlFoo=foo

เป็นไปได้ไหมที่จะแสดงข้อผิดพลาดเมื่อมีชื่อการดำเนินการหรืออาร์กิวเมนต์เส้นทางไม่ถูกต้อง


person ais    schedule 28.05.2017    source แหล่งที่มา
comment
เพื่อให้ชัดเจน... /Account เป็น ตัวควบคุม ที่ถูกต้อง และ /RegisterFoo เป็น การกระทำ ที่ไม่ถูกต้องใช่หรือไม่ นอกจากนี้ คุณต้องการให้โฮสต์ของคุณ ส่งข้อยกเว้น หรือไม่ หรือคุณหมายถึง ตอบกลับด้วยรหัสสถานะเฉพาะ เช่น 400 - คำขอไม่ถูกต้อง   -  person Svek    schedule 28.05.2017
comment
@Svek ใช่ RegisterFoo เป็นการกระทำที่ไม่ถูกต้อง ใช่ โยนข้อยกเว้น   -  person ais    schedule 28.05.2017


คำตอบ (1)


วิธีการสำรอง: การจัดการคอนโทรลเลอร์และการดำเนินการที่ไม่ตรงกัน "สากล"

คุณสามารถเพิ่มเส้นทางใหม่ที่จะเปลี่ยนเส้นทางคำขอที่ไม่ถูกต้องทั้งหมดของคุณไปยังตัวควบคุมและการดำเนินการเฉพาะของคุณเอง:

app.UseMvc(routes =>
{
    // your other routes here

    routes.MapRoute(_
        name: "Fallback",
        url: "{*any}",
        defaults: new { controller = "Error", action = "Handler"});
}

ในกรณีข้างต้น สิ่งนี้จะแมปทุกสิ่ง (ที่ไม่ได้กำหนดไว้) เพื่อไปที่ /Error/Handler คุณสามารถแก้ไขสิ่งนี้เพื่อให้ตรงตามความต้องการของคุณเอง

คุณสามารถอ่านเพิ่มเติมเกี่ยวกับเทมเพลตเส้นทางได้ที่นี่:
https://docs.microsoft.com/en-us/aspnet/core/fundamentals/routing#route-template-reference


ทางเลือก: จัดการต่อคอนโทรลเลอร์

แน่นอนว่ายังมีอีกทางเลือกหนึ่งคือจัดการกับมันโดยใช้คอนโทรลเลอร์แทน แนวทางนี้เป็นแนวทางทั่วไปน้อยกว่าและจะช่วยให้คุณสร้างวิธีที่ตรงเป้าหมายมากขึ้นในการจัดการกับข้อผิดพลาด URI / การกำหนดเส้นทาง

ทางเลือก: ตรวจสอบว่ามีตัวควบคุมหรือการดำเนินการอยู่หรือไม่

string actionName = this.ControllerContext.RouteData.Values["action"].ToString();
string controllerName = this.ControllerContext.RouteData.Values["controller"].ToString();
person Svek    schedule 28.05.2017
comment
ฉันไม่ต้องการให้ /Account/RegisterFoo?returnUrlFoo=foo ทำงาน เนื่องจาก URL นี้ไม่ถูกต้อง ฉันแค่ต้องการข้อยกเว้น - person ais; 28.05.2017
comment
@ais คอนโทรลเลอร์ของคุณสามารถส่งข้อยกเว้นได้ - person Svek; 28.05.2017
comment
ฉันต้องการข้อยกเว้นเมื่อเพจที่มี url นี้แสดงผล - person ais; 29.05.2017
comment
@ais ฉันได้เพิ่มทางเลือกอื่นที่เป็นไปได้สำหรับคุณที่คุณสามารถใช้ได้ ซึ่งจะทำให้คุณสามารถวางการตรวจสอบข้อผิดพลาดในตำแหน่งที่คุณต้องการได้อย่างแม่นยำ - person Svek; 29.05.2017