¿Cómo configuro el tiempo de espera de la solicitud para una acción del controlador en una aplicación asp.net mvc?

94

Quiero aumentar el tiempo de espera de la solicitud para una acción de controlador específica en mi aplicación. Sé que puedo hacerlo en web.config para toda la aplicación, pero prefiero cambiarlo solo en esta acción.

Ejemplo de Web.config:

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

¿Cómo lo hago?

Kyle West
fuente
posible duplicado de ASP.NET MVC y httpRuntime executionTimeout
balexandre

Respuestas:

129

Puede configurar esto mediante programación en el controlador: -

HttpContext.Current.Server.ScriptTimeout = 300;

Establece el tiempo de espera en 5 minutos en lugar de los 110 segundos predeterminados (¿qué extraño valor predeterminado?)

AnthonyWJones
fuente
30
Con la llegada del AsyncController, vale la pena recordar que para obtener un efecto similar para las solicitudes asincrónicas, debe usar la propiedad [AsyncTimeout].
Jason
6
Mi pregunta con esta respuesta es ¿cómo afectaría realmente solo a la acción en la que se colocó? Entonces, una vez que se realiza la solicitud, ¿esa configuración se vuelve a colocar para todas las solicitudes futuras?
jhilden
10
@jhilden HttpContext se crea una instancia por solicitud, por lo que volvería al valor predeterminado en la próxima solicitud
tobiak777
6
Es posible que desee agregar HttpContext.Current (falta 'Current')
bboyle1234
5
Me sale: "httpcontext no contiene una definición de actual". Estoy usando .NET Core 2.0. ¿Algúna idea de cómo arreglar esto?
Tadej
71
<location path="ControllerName/ActionName">
    <system.web>
        <httpRuntime executionTimeout="1000"/>
    </system.web>
</location>

Probablemente sea mejor establecer dichos valores en web.config en lugar de en el controlador. La codificación de opciones configurables se considera perjudicial.

Wojtek Trelak
fuente
15
-1 La codificación rígida está bien para circunstancias especiales como se describe en el OP. Parece que una acción específica necesita un tiempo de espera diferente al resto de las acciones, por lo que la codificación estricta dentro de la acción parece un buen lugar.
Levitikon
6
executionTimeout no funciona para MVC; esta es la respuesta incorrecta. ver aquí: forums.asp.net/p/1715081/…
jfren484
3
tenga en cuenta que esto se ignora completo si el modo de depuración está en msdn.microsoft.com/en-us/library/vstudio/… executionTimeout Atributo Int32 opcional. Especifica el número máximo de segundos que se permite ejecutar una solicitud antes de que ASP.NET la cierre automáticamente. Este tiempo de espera se aplica solo si el atributo de depuración del elemento de compilación es Falso. Por lo tanto, si el atributo de depuración es Verdadero, no es necesario que establezca este atributo en un valor grande para evitar el cierre de la aplicación mientras realiza la depuración.
Nick van Esch
4
Esta no es la respuesta más correcta, porque tiene el efecto secundario de cambiar también el tiempo de espera de ejecución para todas las demás acciones del controlador.
Eric J.
1
@EricJ. solo dentro de las rutas del controlador que comienzan conControllerName\ActionName
GoldBishop
20

Tuve que agregar "Actual" usando .NET 4.5:

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