คืออะไร routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
ฉันไม่พบไฟล์. axd ในโปรเจ็กต์ของฉันฉันสามารถลบกฎเส้นทางนี้ได้หรือไม่
คืออะไร routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
ฉันไม่พบไฟล์. axd ในโปรเจ็กต์ของฉันฉันสามารถลบกฎเส้นทางนี้ได้หรือไม่
คำตอบ:
ไฟล์. maxd ไม่มีอยู่จริง ASP.NET ใช้ URL ที่มีนามสกุล. xd (ScriptResource.axd และ WebResource.axd) ภายในและจัดการโดย HttpHandler
ดังนั้นคุณควรรักษากฎนี้ไว้เพื่อป้องกันไม่ให้ ASP.NET MVC พยายามจัดการคำขอแทนที่จะปล่อยให้ HttpHandler เฉพาะทำ
IgnoreRouteในการกำหนดค่าการกำหนดเส้นทางของ MVC คือเพื่อให้แน่ใจว่า MVC ไม่ได้พยายามจัดการคำขอ เนื่องจาก.axdปลายทางต้องได้รับการจัดการโดยตัวจัดการ HTTP อื่น (ตัวจัดการที่ไม่ได้เป็นส่วนหนึ่งของ MVC) เพื่อให้บริการสคริปต์
พื้นหลังบางส่วน
หากคุณเปิดไฟล์นี้:
%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...&t=6342..." type="text/javascript"></script>
AssemblyResourceLoaderจะได้พบกับการชุมนุมที่จาวาสคริปต์จะถูกฝังโดยใช้ข้อมูลในสตริงการสืบค้นและกลับจาวาสคริปต์
กลับไปที่คำถาม
เพื่อตอบคำถามคืออะไร:
routes.IgnoreRoute("{resource}.axd/{*pathInfo}")
นั่นเป็นการบอกเอ็นจินการกำหนดเส้นทางว่าเราจะไม่ประมวลผลคำขอเหล่านั้นที่ตรงกับรูปแบบเส้นทางนั้น กล่าวคือเราจะไม่ดำเนิน.axdการตามคำขอ ทำไม? เนื่องจาก MVC เองเป็น HttpHandler ที่คล้ายกับ.axdและ.aspxตัวจัดการอื่น ๆ อีกมากมายที่อยู่ในไฟล์ web.config ตัวจัดการ MVC ไม่ทราบวิธีดำเนินการตามคำขอเช่นการค้นหาทรัพยากรที่ฝังในแอสเซมบลี - ผู้ที่AssemblyResourceLoaderรู้วิธีดำเนินการดังกล่าว MVC รู้วิธีทำทุกอย่างที่ทำซึ่งอยู่นอกเหนือขอบเขตของคำถามและคำตอบนี้
มีการรวมเส้นทางที่มีรูปแบบ {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
ไฟล์เหล่านี้ไม่ใช่ไฟล์ (ไม่มีอยู่ในดิสก์) - เป็นเพียงชื่อที่มีการลงทะเบียนตัวจัดการ HTTP บางตัว