Come si imposta il timeout della richiesta per un'azione del controller in un'applicazione asp.net mvc


94

Voglio aumentare il timeout della richiesta per un'azione specifica del controller nella mia applicazione. So di poterlo fare in web.config per l'intera applicazione, ma preferisco cambiarlo solo su questa azione.

Esempio Web.config:

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

Come lo faccio?


Risposte:


128

È possibile impostarlo a livello di programmazione nel controller: -

HttpContext.Current.Server.ScriptTimeout = 300;

Imposta il timeout a 5 minuti invece dei 110 secondi predefiniti (quale impostazione predefinita dispari?)


30
Con l'avvento dell'AsyncController vale la pena ricordare che per ottenere un effetto simile per le richieste asincrone è necessario utilizzare la proprietà [AsyncTimeout].
Jason

6
La mia domanda con questa risposta è: come influirebbe veramente solo sull'unica azione in cui è stata inserita? Quindi, dopo che la richiesta è stata eseguita, l'impostazione viene ripristinata per tutte le richieste future?
jhilden

10
@jhilden HttpContext viene istanziato in base alla richiesta, quindi tornerebbe al valore predefinito nella richiesta successiva
tobiak777

6
Potresti voler aggiungere HttpContext.Current ("Current" è mancante)
bboyle1234

5
Ottengo: "httpcontext non contiene una definizione per current". Sto usando .NET Core 2.0. Qualche idea su come risolvere questo problema?
Tadej

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

Probabilmente è meglio impostare tali valori in web.config invece che nel controller. L'hardcoding delle opzioni configurabili è considerato dannoso.


15
-1 L'hard coding va bene per circostanze speciali come descritto dall'OP. Sembra che un'azione specifica necessiti di un timeout diverso rispetto al resto delle azioni, quindi la codifica rigida all'interno dell'azione sembra un buon posto.
Levitikon

6
executionTimeout non funziona per MVC: questa è la risposta sbagliata. vedere qui: forums.asp.net/p/1715081/…
jfren484

3
si noti che questo viene ignorato se completato se la modalità di debug è su msdn.microsoft.com/en-us/library/vstudio/… executionTimeout Attributo Int32 opzionale. Specifica il numero massimo di secondi che una richiesta può essere eseguita prima che venga arrestata automaticamente da ASP.NET. Questo timeout si applica solo se l'attributo debug nell'elemento di compilazione è False. Pertanto, se l'attributo di debug è True, non è necessario impostare questo attributo su un valore elevato per evitare l'arresto dell'applicazione durante il debug.
Nick van Esch

4
Questa non è la risposta più corretta, perché ha l'effetto collaterale di modificare il timeout di esecuzione anche per tutte le altre azioni del controller.
Eric J.

1
@EricJ. solo all'interno delle rotte del controller che iniziano conControllerName\ActionName
GoldBishop

20

Ho dovuto aggiungere "Current" utilizzando .NET 4.5:

HttpContext.Current.Server.ScriptTimeout = 300;
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.