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?


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


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.


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;
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.