Як встановити час очікування запиту на одну дію контролера в програмі asp.net mvc


94

Я хочу збільшити час очікування запиту на конкретну дію контролера в моїй програмі. Я знаю, що можу це зробити в web.config для всієї програми, але я волів би змінити це лише за допомогою цієї однієї дії.

Приклад Web.config:

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

Як це зробити?


можливий дублікат ASP.NET MVC та httpRuntime ExecutionTimeout
balexandre

Відповіді:


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. Будь-яка ідея, як це виправити?
Тадей

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

Можливо, краще встановити такі значення в web.config замість контролера. Жорстке кодування налаштованих параметрів вважається шкідливим.


15
-1 Жорстке кодування добре для особливих обставин, як описано в OP. Це схоже на те, що конкретна дія потребує іншого часу очікування, ніж інші дії, тому жорстке кодування всередині дії звучить як гарне місце.
Левітікон

6
ExecuTimeout не працює для MVC - це неправильна відповідь. дивіться тут: forums.asp.net/p/1715081/…
jfren484

3
будь ласка, зверніть увагу, це ігнорується завершено, якщо режим налагодження увімкнено msdn.microsoft.com/en-us/library/vstudio/… ExecuTimeout Необов’язковий атрибут Int32 . Вказує максимальну кількість секунд, яку запит може виконувати перед автоматичним вимкненням ASP.NET. Цей тайм-аут застосовується, лише якщо атрибут налагодження в елементі компіляції має значення False. Отже, якщо атрибут налагодження має значення True, вам не потрібно встановлювати для цього атрибута велике значення, щоб уникнути завершення роботи програми під час налагодження.
Нік ван Еш

4
Це не найбільш правильна відповідь, оскільки вона має побічний ефект, змінюючи час очікування виконання для всіх інших дій контролера.
Eric J.

1
@EricJ. лише в межах маршрутів контролерів, які починаються зControllerName\ActionName
GoldBishop

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.