คืออะไร 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 บางตัว