Como defino o tempo limite da solicitação para uma ação do controlador em um aplicativo asp.net mvc

94

Desejo aumentar o tempo limite da solicitação para uma ação de controlador específica em meu aplicativo. Eu sei que posso fazer isso no web.config para todo o aplicativo, mas prefiro alterá-lo apenas nesta ação.

Exemplo de web.config:

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

Como eu faço isso?

Kyle West
fonte
possível duplicata de ASP.NET MVC e httpRuntime executionTimeout
balexandre

Respostas:

128

Você pode definir isso programaticamente no controlador: -

HttpContext.Current.Server.ScriptTimeout = 300;

Define o tempo limite para 5 minutos em vez dos 110 segundos padrão (que padrão estranho?)

AnthonyWJones
fonte
30
Com o advento do AsyncController, vale lembrar que, para obter um efeito semelhante para solicitações assíncronas, você deve usar a propriedade [AsyncTimeout].
Jason
6
Minha pergunta com esta resposta é como isso realmente afetaria apenas a ação em que foi colocado? Então, depois que a solicitação é feita, essa configuração é colocada de volta em todas as solicitações futuras?
jhilden
10
@jhilden HttpContext é instanciado por solicitação, então ele voltaria ao valor padrão na próxima solicitação
tobiak777
6
Você pode querer adicionar HttpContext.Current ('Atual' está faltando)
bboyle1234
5
Eu recebo: "httpcontext não contém uma definição para atual". Estou usando o .NET Core 2.0. Alguma ideia de como consertar isso?
Tadej
70
<location path="ControllerName/ActionName">
    <system.web>
        <httpRuntime executionTimeout="1000"/>
    </system.web>
</location>

Provavelmente, é melhor definir esses valores em web.config em vez de no controlador. A codificação de opções configuráveis ​​é considerada prejudicial.

Wojtek Trelak
fonte
15
-1 A codificação permanente é adequada para circunstâncias especiais, conforme descrito no OP. Parece que uma ação específica precisa de um tempo limite diferente do resto das ações, portanto, codificar dentro da ação parece um bom lugar.
Levitikon
6
executeTimeout não funciona para MVC - esta é a resposta errada. veja aqui: forums.asp.net/p/1715081/…
jfren484
3
observe que isso será ignorado se o modo de depuração estiver em msdn.microsoft.com/en-us/library/vstudio/… executionTimeout atributo Int32 opcional. Especifica o número máximo de segundos que uma solicitação pode ser executada antes de ser desligada automaticamente pelo ASP.NET. Esse tempo limite se aplica apenas se o atributo debug no elemento de compilação for False. Portanto, se o atributo debug for True, você não precisará definir este atributo com um valor grande para evitar o desligamento do aplicativo durante a depuração.
Nick van Esch
4
Esta não é a resposta mais correta, porque tem o efeito colateral de alterar o tempo limite de execução para todas as outras ações do controlador também.
Eric J.
1
@EricJ. apenas dentro da (s) rota (s) do controlador que começam comControllerName\ActionName
GoldBishop
20

Tive que adicionar "Atual" usando .NET 4.5:

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