Bagaimana cara menyetel waktu tunggu permintaan untuk satu tindakan pengontrol dalam aplikasi asp.net MVC

94

Saya ingin menambah waktu tunggu permintaan untuk tindakan pengontrol tertentu dalam aplikasi saya. Saya tahu saya bisa melakukannya di web.config untuk seluruh aplikasi, tetapi saya lebih suka mengubahnya hanya dengan satu tindakan ini.

Contoh web.config:

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

Bagaimana saya melakukannya?

Kyle West
sumber
kemungkinan duplikat ASP.NET MVC dan httpRuntime executionTimeout
balexandre

Jawaban:

129

Anda dapat menyetel ini secara terprogram di pengontrol: -

HttpContext.Current.Server.ScriptTimeout = 300;

Setel batas waktu ke 5 menit alih-alih default 110 detik (apa standar aneh?)

AnthonyWJones
sumber
30
Dengan munculnya AsyncController, perlu diingat bahwa untuk mendapatkan efek serupa untuk permintaan asinkron, Anda harus menggunakan properti [AsyncTimeout].
Jason
6
Pertanyaan saya dengan jawaban ini adalah bagaimana itu benar-benar hanya mempengaruhi satu tindakan di mana itu ditempatkan? Jadi setelah permintaan selesai, apakah pengaturan itu dikembalikan untuk semua permintaan di masa mendatang?
jhilden
10
@jhilden HttpContext dibuat berdasarkan permintaan, jadi itu akan kembali ke nilai default pada permintaan berikutnya
tobiak777
6
Anda mungkin ingin menambahkan HttpContext.Current ('Current' hilang)
bboyle1234
5
Saya mendapatkan: "httpcontext tidak mengandung definisi untuk saat ini". Saya menggunakan .NET Core 2.0. Tahu bagaimana cara memperbaikinya?
Tadej
71
<location path="ControllerName/ActionName">
    <system.web>
        <httpRuntime executionTimeout="1000"/>
    </system.web>
</location>

Mungkin lebih baik menetapkan nilai seperti itu di web.config daripada pengontrol. Pengodean keras opsi yang dapat dikonfigurasi dianggap berbahaya.

Wojtek Trelak
sumber
15
-1 Pengkodean keras tidak masalah untuk keadaan khusus seperti yang dijelaskan OP. Sepertinya tindakan tertentu membutuhkan waktu tunggu yang berbeda dari tindakan lainnya sehingga pengodean keras di dalam tindakan terdengar seperti tempat yang bagus.
Levitikon
6
executionTimeout tidak berfungsi untuk MVC - ini adalah jawaban yang salah. lihat di sini: forums.asp.net/p/1715081/…
jfren484
3
harap dicatat bahwa ini diabaikan selesai jika mode debug pada msdn.microsoft.com/en-us/library/vstudio/… executionTimeout Atribut Int32 Opsional. Menentukan jumlah detik maksimum yang diperbolehkan untuk mengeksekusi permintaan sebelum ditutup secara otomatis oleh ASP.NET. Batas waktu ini hanya berlaku jika atribut debug dalam elemen kompilasi adalah False. Oleh karena itu, jika atribut debug adalah True, Anda tidak perlu menyetel atribut ini ke nilai yang besar untuk menghindari penghentian aplikasi saat Anda men-debug.
Nick van Esch
4
Ini bukan jawaban yang paling benar, karena ini memiliki efek samping mengubah waktu tunggu eksekusi untuk semua tindakan pengontrol lainnya juga.
Eric J.
1
@Tokopedia hanya dalam Controller Route yang dimulai denganControllerName\ActionName
GoldBishop
20

Saya harus menambahkan "Saat Ini" menggunakan .NET 4.5:

HttpContext.Current.Server.ScriptTimeout = 300;
Patrick Michalina
sumber