Jak ustawić limit czasu żądania dla jednej akcji kontrolera w aplikacji asp.net mvc


94

Chcę zwiększyć limit czasu żądania dla określonej akcji kontrolera w mojej aplikacji. Wiem, że mogę to zrobić w pliku web.config dla całej aplikacji, ale wolałbym to zmienić tylko w tej jednej akcji.

Przykład Web.config:

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

Jak mam to zrobić?


Odpowiedzi:


130

Możesz ustawić to programowo w kontrolerze: -

HttpContext.Current.Server.ScriptTimeout = 300;

Ustawia limit czasu na 5 minut zamiast domyślnych 110 sekund (co za nieparzyste domyślne?)


31
Wraz z pojawieniem się AsyncController warto pamiętać, że aby uzyskać podobny efekt dla żądań asynchronicznych, należy użyć właściwości [AsyncTimeout].
Jason

6
Moje pytanie z tą odpowiedzią brzmi: jak naprawdę wpłynie to tylko na jedno działanie, w którym została umieszczona? Czy po wykonaniu żądania to ustawienie zostanie przywrócone dla wszystkich przyszłych żądań?
jhilden

10
@jhilden HttpContext jest tworzony na podstawie każdego żądania, więc w następnym żądaniu zostanie przywrócona wartość domyślna
tobiak777

6
Możesz dodać HttpContext.Current (brakuje 'Current')
bboyle1234

5
Otrzymuję: „httpcontext nie zawiera definicji bieżącego”. Używam .NET Core 2.0. Jakiś pomysł jak to naprawić?
Tadej

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

Chyba lepiej ustawić takie wartości w web.config niż w kontrolerze. Zakodowanie konfigurowalnych opcji jest uważane za szkodliwe.


15
-1 Twarde kodowanie jest dopuszczalne w szczególnych okolicznościach, jak opisano w PO. Wygląda na to, że określona akcja wymaga innego limitu czasu niż reszta czynności, więc trudne zakodowanie wewnątrz akcji brzmi jak dobre miejsce.
Levitikon

6
ExecutionTimeout nie działa dla MVC - to jest zła odpowiedź. patrz tutaj: forums.asp.net/p/1715081/ ...
jfren484

3
należy pamiętać, że jest to ignorowane i ukończone, jeśli tryb debugowania jest ustawiony na msdn.microsoft.com/en-us/library/vstudio/… ExecutionTimeout Opcjonalny atrybut Int32. Określa maksymalną liczbę sekund, przez które żądanie może zostać wykonane, zanim zostanie automatycznie wyłączone przez ASP.NET. Ten limit czasu ma zastosowanie tylko wtedy, gdy atrybut debugowania w elemencie kompilacji ma wartość False. Dlatego jeśli atrybut debugowania ma wartość True, nie trzeba ustawiać tego atrybutu na dużą wartość, aby uniknąć zamykania aplikacji podczas debugowania.
Nick van Esch

4
To nie jest najbardziej poprawna odpowiedź, ponieważ ma to efekt uboczny polegający na zmianie limitu czasu wykonywania również dla wszystkich innych akcji kontrolera.
Eric J.

1
@EricJ. tylko w obrębie trasy (tras) kontrolera, która zaczyna się odControllerName\ActionName
GoldBishop

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.