asp.net mvcアプリケーションで1つのコントローラーアクションの要求タイムアウトを設定する方法


94

アプリケーションの特定のコントローラーアクションのリクエストタイムアウトを増やしたいのですが。アプリケーション全体のweb.configで実行できることはわかっていますが、この1つのアクションだけで変更したいと思います。

Web.configの例:

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

どうすればいいのですか?


回答:


128

これをプログラムでコントローラーで設定できます:-

HttpContext.Current.Server.ScriptTimeout = 300;

タイムアウトをデフォルトの110秒ではなく5分に設定します(奇妙なデフォルトとは?)


30
AsyncControllerの登場により、非同期要求に対して同様の効果を得るには[AsyncTimeout]プロパティを使用する必要があることを覚えておく価値があります。
Jason、

6
この回答に関する私の質問は、それが配置された1つのアクションに本当に影響するだけなのでしょうか。それで、リクエストが行われた後、その設定は将来のすべてのリクエストのために戻されますか?
jhilden 2013

10
@jhilden HttpContextはリクエストごとにインスタンス化されるため、次のリクエストでデフォルト値に戻ります
tobiak777

6
あなたはHttpContext.Currentを追加したいかもしれません( 'Current'が欠落しています)
bboyle1234

5
「httpcontextには現在の定義が含まれていません」と表示されます。.NET Core 2.0を使用しています。これを修正する方法はありますか?
Tadej 2017年

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

おそらく、そのような値をコントローラではなくweb.configに設定する方が良いでしょう。構成可能なオプションのハードコーディングは有害と見なされます。


15
-1 OPで説明されているように、ハードコーディングは特別な状況では問題ありません。特定のアクションは他のアクションとは異なるタイムアウトを必要とするように聞こえるので、アクション内のハードコーディングは良い場所のように聞こえます。
Levitikon 2012

6
executionTimeoutはMVCでは機能しません-これは間違った答えです。こちらをご覧ください:forums.asp.net/p/1715081/...
jfren484

3
デバッグモードがmsdn.microsoft.com/en-us/library/vstudio/…にある場合、これは完了しても無視されます 。executionTimeout オプションのInt32属性。ASP.NETによって自動的にシャットダウンされるまでに要求の実行が許可される最大秒数を指定します。このタイムアウトは、compilation要素のdebug属性がFalseの場合にのみ適用されます。したがって、debug属性がTrueの場合、デバッグ中のアプリケーションのシャットダウンを回避するために、この属性を大きな値に設定する必要はありません。
Nick van Esch 2014

4
他のすべてのコントローラアクションの実行タイムアウトも変更するという副作用があるため、これは最も正しい答えではありません。
エリックJ.

1
@EricJ。次で始まるコントローラールート内でのみControllerName\ActionName
GoldBishop 2017年

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.