ฉันจะตั้งค่าการหมดเวลาการร้องขอสำหรับการดำเนินการของคอนโทรลเลอร์หนึ่งตัวในแอปพลิเคชัน mvc ของ asp.net ได้อย่างไร


94

ฉันต้องการเพิ่มระยะหมดเวลาของคำขอสำหรับการดำเนินการของคอนโทรลเลอร์เฉพาะในแอปพลิเคชันของฉัน ฉันรู้ว่าฉันสามารถทำได้ใน web.config สำหรับแอปพลิเคชันทั้งหมด แต่ฉันอยากจะเปลี่ยนแค่การกระทำเดียวนี้

ตัวอย่าง Web.config:

<system.web>
  <httpRuntime executionTimeout="1000" /> 
</system.web>

ฉันต้องทำอย่างไร?


อาจซ้ำกันของASP.NET MVC และ
httpRuntime ExecutionTimeout

คำตอบ:


130

คุณสามารถตั้งค่านี้โดยทางโปรแกรมได้ในคอนโทรลเลอร์: -

HttpContext.Current.Server.ScriptTimeout = 300;

ตั้งค่าการหมดเวลาเป็น 5 นาทีแทนที่จะเป็นค่าเริ่มต้น 110 วินาที (ค่าเริ่มต้นที่แปลกคืออะไร)


31
ด้วยการถือกำเนิดของ AsyncController คุณควรจำไว้ว่าเพื่อให้ได้ผลที่คล้ายกันสำหรับคำขอแบบอะซิงโครนัสคุณควรใช้คุณสมบัติ [AsyncTimeout]
Jason

6
คำถามของฉันที่มีคำตอบนี้คือจะมีผลต่อการกระทำเพียงครั้งเดียวอย่างแท้จริงอย่างไร? ดังนั้นหลังจากการร้องขอเสร็จสิ้นการตั้งค่านั้นจะถูกนำกลับไปใช้กับคำขอในอนาคตทั้งหมดหรือไม่
jhilden

10
@jhilden HttpContext ถูกสร้างอินสแตนซ์ตามคำขอดังนั้นจะกลับไปเป็นค่าเริ่มต้นในคำขอถัดไป
tobiak777

6
คุณอาจต้องการเพิ่ม HttpContext.Current ('ปัจจุบัน' หายไป)
bboyle1234

5
ฉันได้รับ: "httpcontext ไม่มีคำจำกัดความสำหรับปัจจุบัน" ฉันใช้. NET Core 2.0 มีความคิดอย่างไรที่จะแก้ไขปัญหานี้
ธ เดช

72
<location path="ControllerName/ActionName">
    <system.web>
        <httpRuntime executionTimeout="1000"/>
    </system.web>
</location>

อาจเป็นการดีกว่าหากตั้งค่าดังกล่าวใน web.config แทนคอนโทรลเลอร์ การเข้ารหัสตัวเลือกที่กำหนดค่าได้ยากถือเป็นอันตราย


15
-1 Hard coding ใช้ได้สำหรับสถานการณ์พิเศษตามที่ OP อธิบายไว้ ดูเหมือนว่าการดำเนินการบางอย่างต้องการการหมดเวลาที่แตกต่างจากการกระทำอื่น ๆ ดังนั้นการเข้ารหัสอย่างหนักภายในการกระทำจึงดูเหมือนเป็นสถานที่ที่ดี
Levitikon

6
ecutionTimeout ไม่ทำงานสำหรับ MVC - นี่คือคำตอบที่ผิด ดูได้ที่นี่: forums.asp.net/p/1715081/…
jfren484

3
โปรดทราบว่านี่จะถูกละเว้นหากโหมดดีบักอยู่บน msdn.microsoft.com/en-us/library/vstudio/…ecutionTimeout แอตทริบิวต์ Int32 เสริม ระบุจำนวนวินาทีสูงสุดที่คำขอได้รับอนุญาตให้ดำเนินการก่อนที่ ASP.NET จะปิดโดยอัตโนมัติ การหมดเวลานี้จะมีผลก็ต่อเมื่อแอตทริบิวต์ debug ในองค์ประกอบการคอมไพล์เป็น False ดังนั้นหากแอตทริบิวต์การดีบักเป็น True คุณไม่จำเป็นต้องตั้งค่าแอตทริบิวต์นี้เป็นค่าขนาดใหญ่เพื่อหลีกเลี่ยงการปิดแอปพลิเคชันในขณะที่คุณกำลังดีบัก
Nick van Esch

4
นี่ไม่ใช่คำตอบที่ถูกต้องที่สุดเนื่องจากมีผลข้างเคียงจากการเปลี่ยนระยะหมดเวลาการดำเนินการสำหรับการดำเนินการอื่น ๆ ของคอนโทรลเลอร์ด้วย
Eric J.

1
@ เอริกเจ. เฉพาะภายในเส้นทางควบคุมที่เริ่มต้นด้วยControllerName\ActionName
GoldBishop

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