Bir asp.net mvc uygulamasında bir denetleyici eylemi için istek zaman aşımını nasıl ayarlayabilirim


94

Uygulamamdaki belirli bir denetleyici eylemi için istek zaman aşımını artırmak istiyorum. Bunu tüm uygulama için web.config içinde yapabileceğimi biliyorum, ancak bunu yalnızca bu eylemle değiştirmeyi tercih ederim.

Web.config örneği:

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

Nasıl yaparım?


Yanıtlar:


130

Bunu kontrolörde programlı olarak ayarlayabilirsiniz: -

HttpContext.Current.Server.ScriptTimeout = 300;

Zaman aşımını varsayılan 110 saniye yerine 5 dakikaya ayarlar (ne tuhaf bir varsayılan?)


31
AsyncController'ın gelişiyle birlikte, zaman uyumsuz istekler için benzer bir etki elde etmek için [AsyncTimeout] özelliğini kullanmanız gerektiğini hatırlamakta fayda var.
Jason

6
Bu yanıtıyla ilgili sorum şu; bu, yalnızca yerleştirildiği tek eylemi gerçekten nasıl etkileyebilirdi? Yani istek yapıldıktan sonra bu ayar gelecekteki tüm istekler için geri alınır mı?
jhilden

10
@jhilden HttpContext istek bazında örneklenir, bu nedenle sonraki istekte varsayılan değere geri döner
tobiak777

6
HttpContext.Current ('Current' eksik) eklemek isteyebilirsiniz
bboyle1234

5
Anlıyorum: "httpcontext, geçerli için bir tanım içermiyor". .NET Core 2.0 kullanıyorum. Bunu nasıl düzelteceğine dair bir fikrin var mı?
Tadej

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

Muhtemelen bu tür değerleri denetleyici yerine web.config dosyasında ayarlamak daha iyidir. Yapılandırılabilir seçeneklerin kodlanması zararlı kabul edilir.


15
-1 Sabit kodlama, OP'nin açıkladığı gibi özel durumlar için uygundur. Belirli bir eylemin diğer eylemlerden farklı bir zaman aşımına ihtiyacı varmış gibi görünüyor, bu yüzden eylemin içinde sert kodlama iyi bir yer gibi geliyor.
Levitikon

6
executionTimeout MVC için çalışmaz - bu yanlış cevaptır. buraya bakın: forums.asp.net/p/1715081/…
jfren484

3
hata ayıklama modu msdn.microsoft.com/en-us/library/vstudio/… executionTimeout İsteğe Bağlı Int32 özniteliğinde ise bunun tamamlandığını lütfen unutmayın . ASP.NET tarafından otomatik olarak kapatılmadan önce bir isteğin yürütülmesine izin verilen maksimum saniye sayısını belirtir. Bu zaman aşımı yalnızca derleme öğesindeki hata ayıklama özniteliği False ise geçerlidir. Bu nedenle, hata ayıklama özniteliği True ise, hata ayıklama sırasında uygulamanın kapanmasını önlemek için bu özniteliği büyük bir değere ayarlamanız gerekmez.
Nick van Esch

4
Bu en doğru cevap değildir, çünkü diğer tüm denetleyici eylemleri için de yürütme zaman aşımını değiştirme yan etkisine sahiptir.
Eric J.

1
@EricJ. yalnızcaControllerName\ActionName
GoldBishop

20

.NET 4.5 kullanarak "Current" eklemem gerekiyordu:

HttpContext.Current.Server.ScriptTimeout = 300;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.