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?


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?)


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.


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;
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.