Wie lege ich das Anforderungszeitlimit für eine Controller-Aktion in einer asp.net mvc-Anwendung fest?

94

Ich möchte das Anforderungszeitlimit für eine bestimmte Controller-Aktion in meiner Anwendung erhöhen. Ich weiß, dass ich es in der web.config für die gesamte Anwendung tun kann, aber ich möchte es lieber nur bei dieser einen Aktion ändern.

Beispiel für Web.config:

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

Wie mache ich es?

Kyle West
quelle
Mögliches Duplikat von ASP.NET MVC und httpRuntime ExecutionTimeout
Balexandre

Antworten:

128

Sie können dies programmgesteuert in der Steuerung einstellen: -

HttpContext.Current.Server.ScriptTimeout = 300;

Setzt das Zeitlimit auf 5 Minuten anstelle der Standard-110 Sekunden (was für eine ungerade Standardeinstellung?)

AnthonyWJones
quelle
30
Mit dem Aufkommen des AsyncControllers sollten Sie bedenken, dass Sie die Eigenschaft [AsyncTimeout] verwenden sollten, um einen ähnlichen Effekt für asynchrone Anforderungen zu erzielen.
Jason
6
Meine Frage mit dieser Antwort ist, wie würde es wirklich nur die eine Aktion beeinflussen, in der es platziert wurde? Wird diese Einstellung nach Abschluss der Anforderung für alle zukünftigen Anforderungen zurückgesetzt?
Jhilden
10
@jhilden HttpContext wird pro Anfrage instanziiert, so dass es bei der nächsten Anfrage wieder auf den Standardwert zurückgesetzt wird
tobiak777
6
Vielleicht möchten Sie HttpContext.Current hinzufügen ('Current' fehlt)
bboyle1234
5
Ich bekomme: "httpcontext enthält keine Definition für aktuell". Ich verwende .NET Core 2.0. Irgendeine Idee, wie man das behebt?
Tadej
70
<location path="ControllerName/ActionName">
    <system.web>
        <httpRuntime executionTimeout="1000"/>
    </system.web>
</location>

Wahrscheinlich ist es besser, solche Werte in web.config anstelle von controller festzulegen. Die Hardcodierung konfigurierbarer Optionen wird als schädlich angesehen.

Wojtek Trelak
quelle
15
-1 Die Hardcodierung ist für besondere Umstände in Ordnung, wie im OP beschrieben. Es hört sich so an, als ob eine bestimmte Aktion eine andere Zeitüberschreitung benötigt als die anderen Aktionen. Daher klingt eine harte Codierung innerhalb der Aktion nach einem guten Ort.
Levitikon
6
ExecutionTimeout funktioniert nicht für MVC - dies ist die falsche Antwort. siehe hier: forums.asp.net/p/1715081/…
jfren484
3
Bitte beachten Sie, dass dies ignoriert wird, wenn sich der Debug-Modus in msdn.microsoft.com/en-us/library/vstudio/… executeTimeout befindet. Optionales Int32-Attribut. Gibt die maximale Anzahl von Sekunden an, die eine Anforderung ausgeführt werden darf, bevor sie von ASP.NET automatisch heruntergefahren wird. Dieses Zeitlimit gilt nur, wenn das Debug-Attribut im Kompilierungselement False ist. Wenn das Debug-Attribut True ist, müssen Sie dieses Attribut daher nicht auf einen großen Wert festlegen, um ein Herunterfahren der Anwendung während des Debuggens zu vermeiden.
Nick van Esch
4
Dies ist nicht die richtigste Antwort, da dies den Nebeneffekt hat, dass das Ausführungszeitlimit auch für alle anderen Controller-Aktionen geändert wird.
Eric J.
1
@EricJ. nur innerhalb der Controller Route (s), die mitControllerName\ActionName
GoldBishop
20

Ich musste "Current" mit .NET 4.5 hinzufügen:

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