如何在ASP.NET MVC应用程序中为一个控制器操作设置请求超时


Answers:


128

您可以在控制器中以编程方式进行设置:-

HttpContext.Current.Server.ScriptTimeout = 300;

将超时设置为5分钟,而不是默认的110秒(奇怪的默认值是多少?)


30
随着AsyncController的到来,值得记住的是,要对异步请求获得类似的效果,您应该使用[AsyncTimeout]属性。
杰森

6
我对这个答案的疑问是,它实际上将如何只影响它所处的一个动作?那么,在请求完成后,该设置是否会被所有以后的请求放回原处?
jhilden

10
@jhilden HttpContext是在每个请求的基础上实例化的,因此它将在下一个请求时恢复为默认值
tobiak777

6
您可能想添加HttpContext.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 2012年

6
executeTimeout对MVC不起作用-这是错误的答案。在这里看到:forums.asp.net/p/1715081/...
jfren484

3
请注意,如果调试模式位于msdn.microsoft.com/en-us/library/vstudio/上,则此操作将被忽略完成 。executeTimeout 可选的Int32属性。指定允许请求在被ASP.NET自动关闭之前执行的最大秒数。仅当编译元素中的debug属性为False时,此超时才适用。因此,如果debug属性为True,则不必将此属性设置为较大的值,以避免在调试时关闭应用程序。
Nick van Esch 2014年

4
这不是最正确的答案,因为它还具有更改所有其他控制器操作的执行超时的副作用。
埃里克·J.

1
@EricJ。仅在以以下内容开头的控制器路线内ControllerName\ActionName
GoldBishop

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.