route.IgnoreRoute คืออะไร (“ {resource} .axd / {* pathInfo}”)


คำตอบ:


81

ไฟล์. maxd ไม่มีอยู่จริง ASP.NET ใช้ URL ที่มีนามสกุล. xd (ScriptResource.axd และ WebResource.axd) ภายในและจัดการโดย HttpHandler

ดังนั้นคุณควรรักษากฎนี้ไว้เพื่อป้องกันไม่ให้ ASP.NET MVC พยายามจัดการคำขอแทนที่จะปล่อยให้ HttpHandler เฉพาะทำ


5
ฉันค่อนข้างแน่ใจว่าคุณต้องการให้ผู้ใช้สามารถดาวน์โหลด "ไฟล์ axd" บนไซต์ของคุณได้เนื่องจากมีจาวาสคริปต์และสไตล์
Moulde

3
คำตอบนี้ไม่ถูกต้อง เหตุผลIgnoreRouteในการกำหนดค่าการกำหนดเส้นทางของ MVC คือเพื่อให้แน่ใจว่า MVC ไม่ได้พยายามจัดการคำขอ เนื่องจาก.axdปลายทางต้องได้รับการจัดการโดยตัวจัดการ HTTP อื่น (ตัวจัดการที่ไม่ได้เป็นส่วนหนึ่งของ MVC) เพื่อให้บริการสคริปต์
NightOwl888

1
สิ่งนี้ไม่จำเป็นทั้งหมดใน. NET core หรือไม่? ฉันค้นหาใน Google มาประมาณหนึ่งชั่วโมงแล้วและไม่พบข้อมูลอ้างอิงใด ๆ ว่าขั้นตอนที่เทียบเท่าจะเป็นอย่างไรดังนั้นฉันคิดว่ามันไม่จำเป็น
Dinerdo

35

พื้นหลังบางส่วน

หากคุณเปิดไฟล์นี้:

%WINDIR%\Microsoft.NET\Framework\version\Config\Web.config

คุณจะพบสิ่งนี้ภายในไฟล์:

<add path="WebResource.axd"
     verb="GET"
     type="System.Web.Handlers.AssemblyResourceLoader"
     validate="True" />

นั่นเป็นการบอกรันไทม์ Asp.NET โดยทั่วไป: "เฮ้เพื่อน asp.net ถ้ามีคำขอมาสำหรับ WebResource.axd ให้ใช้ AssemblyResourceLoader เพื่อดำเนินการตามคำขอ"

กรุณาอย่าทราบว่าWebResource.axdไม่ใช่แฟ้มแต่เพียงแผนที่ (ถ้าผมอาจจะพูด) AssemblyResourceLoaderเพื่อ เป็นชื่อที่ลงทะเบียนตัวจัดการ ในเครื่องของฉันฉันพบตัวจัดการ. maxd ต่อไปนี้:

<add path="eurl.axd" verb="*" type="System.Web.HttpNotFoundHandler" validate="True" />
<add path="trace.axd" verb="*" type="System.Web.Handlers.TraceHandler" validate="True" />
<add path="WebResource.axd" verb="GET" type="System.Web.Handlers.AssemblyResourceLoader" validate="True" />
<add verb="*" path="*_AppService.axd" 

ตกลงแล้วตัวจัดการนั้นทำอะไร?

AssemblyResourceLoaderรู้วิธีที่จะมองหาไฟล์ที่ฝังอยู่ภายในการชุมนุมเพื่อที่จะสามารถให้บริการได้ (ส่งให้กับลูกค้าเช่นเบราว์เซอร์) ตัวอย่างเช่นในรูปแบบเว็บ asp.net หากคุณใช้การควบคุมการตรวจสอบความถูกต้องจะขึ้นอยู่กับจาวาสคริปต์บางตัวเพื่อแสดงข้อผิดพลาดบนหน้าเว็บ อย่างไรก็ตามจาวาสคริปต์นั้นฝังอยู่ในแอสเซมบลี เบราว์เซอร์ต้องการ javascript ดังนั้นคุณจะเห็นสิ่งนี้ใน html ของหน้า:

<script src="/YourSite/WebResource.axd?d=fs7zUa...&amp;t=6342..." type="text/javascript"></script>

AssemblyResourceLoaderจะได้พบกับการชุมนุมที่จาวาสคริปต์จะถูกฝังโดยใช้ข้อมูลในสตริงการสืบค้นและกลับจาวาสคริปต์


กลับไปที่คำถาม

เพื่อตอบคำถามคืออะไร:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}")

นั่นเป็นการบอกเอ็นจินการกำหนดเส้นทางว่าเราจะไม่ประมวลผลคำขอเหล่านั้นที่ตรงกับรูปแบบเส้นทางนั้น กล่าวคือเราจะไม่ดำเนิน.axdการตามคำขอ ทำไม? เนื่องจาก MVC เองเป็น HttpHandler ที่คล้ายกับ.axdและ.aspxตัวจัดการอื่น ๆ อีกมากมายที่อยู่ในไฟล์ web.config ตัวจัดการ MVC ไม่ทราบวิธีดำเนินการตามคำขอเช่นการค้นหาทรัพยากรที่ฝังในแอสเซมบลี - ผู้ที่AssemblyResourceLoaderรู้วิธีดำเนินการดังกล่าว MVC รู้วิธีทำทุกอย่างที่ทำซึ่งอยู่นอกเหนือขอบเขตของคำถามและคำตอบนี้


2
นี่น่าจะเป็นคำตอบที่ได้รับการยอมรับอย่างแน่นอนบวกหนึ่งจากฉัน
ยะห์ยา

ในที่สุดคำอธิบายที่ชัดเจนว่า WebResource.axd ทำอะไรได้จริงในขณะเดียวกันก็ให้คำตอบที่ชัดเจนสำหรับคำถาม ขอบคุณ
ben_mj

18

มีการรวมเส้นทางที่มีรูปแบบ {resource} .axd / {* pathInfo} เพื่อป้องกันไม่ให้ส่งคำขอไฟล์ทรัพยากรบนเว็บเช่น WebResource.axd หรือ ScriptResource.axd ไปยังคอนโทรลเลอร์

อ่านลิงค์: http://msdn.microsoft.com/en-us/library/cc668201%28v=vs.100%29.aspx

คุณยังสามารถระบุว่าการกำหนดเส้นทางไม่ควรจัดการกับคำขอ URL บางรายการ คุณป้องกันการกำหนดเส้นทางจากการจัดการคำขอบางอย่างโดยกำหนดเส้นทางและระบุว่าควรใช้คลาสStopRoutingHandlerเพื่อจัดการกับรูปแบบนั้น เมื่อมีคำขอจัดการโดยStopRoutingHandlerวัตถุที่StopRoutingHandlerบล็อกวัตถุใด ๆ การประมวลผลเพิ่มเติมของการร้องขอเป็นเส้นทางที่ การร้องขอจะถูกประมวลผลเป็นเพจ ASP.NET บริการเว็บหรือจุดสิ้นสุด ASP.NET อื่นแทน คุณสามารถใช้เมธอดRouteCollection.Ignore (หรือRouteCollectionExtensions.IgnoreRouteสำหรับแอ็พพลิเคชัน MVC) เพื่อสร้างเส้นทางที่ใช้คลาสStopRoutingHandler



7

ไฟล์เหล่านี้ไม่ใช่ไฟล์ (ไม่มีอยู่ในดิสก์) - เป็นเพียงชื่อที่มีการลงทะเบียนตัวจัดการ HTTP บางตัว


คำตอบที่ตรงประเด็นที่สุดที่ฉันอยากจะพูด
Sakthivel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.