Làm cách nào để đặt thời gian chờ yêu cầu cho một hành động của bộ điều khiển trong ứng dụng mvc asp.net


94

Tôi muốn tăng thời gian chờ yêu cầu cho một hành động trình điều khiển cụ thể trong ứng dụng của mình. Tôi biết tôi có thể làm điều đó trong web.config cho toàn bộ ứng dụng, nhưng tôi muốn thay đổi nó chỉ bằng một hành động này.

Ví dụ về Web.config:

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

Tôi phải làm nó như thế nào?


Câu trả lời:


128

Bạn có thể đặt điều này theo chương trình trong bộ điều khiển: -

HttpContext.Current.Server.ScriptTimeout = 300;

Đặt thời gian chờ thành 5 phút thay vì 110 giây mặc định (mặc định thật kỳ cục?)


30
Với sự ra đời của AsyncController, bạn nên nhớ rằng để có được hiệu ứng tương tự đối với các yêu cầu không đồng bộ, bạn nên sử dụng thuộc tính [AsyncTimeout].
Jason

6
Câu hỏi của tôi với câu trả lời này là làm thế nào nó thực sự chỉ ảnh hưởng đến một hành động mà nó được đặt trong đó? Vì vậy, sau khi yêu cầu được thực hiện, cài đặt đó có được khôi phục lại cho tất cả các yêu cầu trong tương lai không?
jhilden

10
@jhilden HttpContext được khởi tạo trên cơ sở theo yêu cầu, vì vậy nó sẽ trở về giá trị mặc định trên các yêu cầu tiếp theo
tobiak777

6
Bạn có thể muốn thêm HttpContext.Current ( 'hiện tại' là mất tích)
bboyle1234

5
Tôi nhận được: "httpcontext không chứa định nghĩa cho hiện tại". Tôi đang sử dụng .NET Core 2.0. Bất kỳ ý tưởng làm thế nào để sửa chữa điều này?
Tadej

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

Có lẽ tốt hơn là đặt các giá trị như vậy trong web.config thay vì bộ điều khiển. Mã cứng của các tùy chọn có thể cấu hình được coi là có hại.


15
-1 Mã hóa cứng là được cho các trường hợp đặc biệt như OP đã mô tả. Có vẻ như một hành động cụ thể cần thời gian chờ khác với các hành động còn lại, vì vậy việc viết mã khó bên trong hành động có vẻ là một nơi tốt.
Levitikon

6
executeTimeout không hoạt động đối với MVC - đây là câu trả lời sai. xem tại đây: forum.asp.net/p/1715081/…
jfren484 18/1213

3
xin lưu ý rằng điều này được bỏ qua đã hoàn tất nếu chế độ gỡ lỗi trên msdn.microsoft.com/en-us/library/vstudio/… executeTimeout Thuộc tính Int32 tùy chọn. Chỉ định số giây tối đa mà một yêu cầu được phép thực hiện trước khi bị ASP.NET tự động tắt. Thời gian chờ này chỉ áp dụng nếu thuộc tính gỡ lỗi trong phần tử biên dịch là Sai. Do đó, nếu thuộc tính gỡ lỗi là True, bạn không cần phải đặt thuộc tính này thành giá trị lớn để tránh ứng dụng bị tắt khi bạn đang gỡ lỗi.
Nick van Esch

4
Đây không phải là câu trả lời đúng nhất, vì nó có tác dụng phụ là thay đổi thời gian chờ thực thi cho tất cả các hành động của bộ điều khiển khác.
Eric J.

1
@EricJ. chỉ trong (các) Tuyến bộ điều khiển bắt đầu bằngControllerName\ActionName
GoldBishop

20

Tôi đã phải thêm "Hiện tại" bằng cách sử dụng .NET 4.5:

HttpContext.Current.Server.ScriptTimeout = 300;
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.