Comment définir le délai d'expiration de la demande pour une action de contrôleur dans une application mvc asp.net

94

Je souhaite augmenter le délai d'expiration de la demande pour une action de contrôleur spécifique dans mon application. Je sais que je peux le faire dans le web.config pour l'ensemble de l'application, mais je préfère le changer sur cette seule action.

Exemple Web.config:

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

Comment fait-on ça?

Kyle West
la source
duplication possible de ASP.NET MVC et httpRuntime executionTimeout
balexandre

Réponses:

128

Vous pouvez définir cela par programme dans le contrôleur: -

HttpContext.Current.Server.ScriptTimeout = 300;

Définit le délai d'expiration à 5 minutes au lieu des 110 secondes par défaut (quelle étrange valeur par défaut?)

AnthonyWJones
la source
30
Avec l'avènement d'AsyncController, il convient de se rappeler que pour obtenir un effet similaire pour les requêtes asynchrones, vous devez utiliser la propriété [AsyncTimeout].
Jason
6
Ma question avec cette réponse est de savoir comment cela n'affecterait-il vraiment que la seule action dans laquelle il a été placé? Donc, une fois la demande terminée, ce paramètre est-il rétabli pour toutes les demandes futures?
jhilden
10
@jhilden HttpContext est instancié sur une base par requête, il reviendrait donc à la valeur par défaut lors de la prochaine requête
tobiak777
6
Vous voudrez peut-être ajouter HttpContext.Current ('Current' est manquant)
bboyle1234
5
J'obtiens: "httpcontext ne contient pas de définition pour le courant". J'utilise .NET Core 2.0. Une idée de comment résoudre ce problème?
Tadej
71
<location path="ControllerName/ActionName">
    <system.web>
        <httpRuntime executionTimeout="1000"/>
    </system.web>
</location>

Il est probablement préférable de définir ces valeurs dans web.config au lieu de controller. Le codage en dur des options configurables est considéré comme dangereux.

Wojtek Trelak
la source
15
-1 Le codage en dur est acceptable pour des circonstances spéciales telles que décrites par l'OP. Il semble qu'une action spécifique nécessite un délai d'expiration différent du reste des actions, donc le codage en dur à l'intérieur de l'action semble être un bon endroit.
Levitikon le
6
executionTimeout ne fonctionne pas pour MVC - c'est la mauvaise réponse. voir ici: forums.asp.net/p/1715081/…
jfren484
3
veuillez noter que ceci est ignoré terminé si le mode de débogage est sur msdn.microsoft.com/en-us/library/vstudio/… executionTimeout Attribut Int32 facultatif. Spécifie le nombre maximal de secondes qu'une demande est autorisée à s'exécuter avant d'être automatiquement arrêtée par ASP.NET. Ce délai d'expiration s'applique uniquement si l'attribut de débogage dans l'élément de compilation est False. Par conséquent, si l'attribut de débogage est True, vous ne devez pas définir cet attribut sur une valeur élevée afin d'éviter l'arrêt de l'application pendant le débogage.
Nick van Esch le
4
Ce n'est pas la réponse la plus correcte, car elle a pour effet secondaire de modifier également le délai d'exécution pour toutes les autres actions du contrôleur.
Eric J.
1
@EricJ. uniquement dans la ou les routes de contrôleur commençant parControllerName\ActionName
GoldBishop
20

J'ai dû ajouter "Current" en utilisant .NET 4.5:

HttpContext.Current.Server.ScriptTimeout = 300;
Patrick Michalina
la source