Як встановити час очікування запиту на одну дію контролера в програмі 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.