asp.net mvc 애플리케이션에서 하나의 컨트롤러 작업에 대한 요청 시간 제한을 설정하려면 어떻게해야합니까?


94

내 응용 프로그램에서 특정 컨트롤러 작업에 대한 요청 시간 제한을 늘리고 싶습니다. 전체 응용 프로그램에 대해 web.config에서 수행 할 수 있다는 것을 알고 있지만이 작업 한 번만 변경하고 싶습니다.

Web.config 예 :

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

어떻게하나요?


답변:


128

컨트롤러에서 프로그래밍 방식으로 설정할 수 있습니다.

HttpContext.Current.Server.ScriptTimeout = 300;

시간 제한을 기본값 인 110 초 대신 5 분으로 설정합니다 (이상한 기본값?).


30
AsyncController의 출현으로 비동기 요청에 대해 유사한 효과를 얻으려면 [AsyncTimeout] 속성을 사용해야한다는 것을 기억할 가치가 있습니다.
Jason

6
이 답변에 대한 내 질문은 그것이 배치 된 하나의 행동에만 진정으로 영향을 미칠 것인가? 따라서 요청이 완료된 후 해당 설정이 향후 모든 요청에 ​​대해 다시 적용됩니까?
jhilden

10
@jhilden HttpContext는 요청별로 인스턴스화되므로 다음 요청에서 기본값으로 돌아갑니다
tobiak777

6
HttpContext.Current를 추가하고 싶을 수도 있습니다 ( 'Current'가 누락 됨)
bboyle1234

5
"httpcontext에 현재 정의가 없습니다"라는 메시지가 나타납니다. .NET Core 2.0을 사용하고 있습니다. 이 문제를 해결하는 방법을 아십니까?
Tadej

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

아마도 컨트롤러 대신 web.config에서 이러한 값을 설정하는 것이 좋습니다. 구성 가능한 옵션의 하드 코딩은 유해한 것으로 간주됩니다.


15
-1 OP에 설명 된대로 특수한 상황에서는 하드 코딩이 가능합니다. 특정 작업은 나머지 작업과 다른 시간 제한이 필요한 것처럼 들리므로 작업 내부의 하드 코딩은 좋은 장소처럼 들립니다.
Levitikon

6
executionTimeout은 MVC에서 작동하지 않습니다. 이것은 잘못된 대답입니다. 여기 참조 : forums.asp.net/p/1715081/...
jfren484

3
디버그 모드가 msdn.microsoft.com/en-us/library/vstudio/… 에있는 경우 이것은 무시됩니다 . executionTimeout 선택적 Int32 특성입니다. ASP.NET에 의해 자동으로 종료되기 전에 요청을 실행할 수있는 최대 시간 (초)을 지정합니다. 이 시간 제한은 컴파일 요소의 디버그 속성이 False 인 경우에만 적용됩니다. 따라서 debug 속성이 True이면 디버깅하는 동안 응용 프로그램 종료를 방지하기 위해이 속성을 큰 값으로 설정할 필요가 없습니다.
Nick van Esch

4
다른 모든 컨트롤러 작업에 대한 실행 시간 제한을 변경하는 부작용도 있기 때문에 이것은 가장 정답이 아닙니다.
Eric J.

1
@EricJ. 다음으로 시작하는 컨트롤러 경로 내에서만ControllerName\ActionName
GoldBishop 2017

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.