C# 如何为IIS和IIS Express上的一个控制器操作设置请求超时

C# 如何为IIS和IIS Express上的一个控制器操作设置请求超时,c#,iis,asp.net-core,asp.net-core-mvc,iis-express,C#,Iis,Asp.net Core,Asp.net Core Mvc,Iis Express,我需要在控制器中以编程方式增加应用程序中特定控制器操作的请求超时 到目前为止,我发现处理长时间运行的脚本(如果您的应用程序无法避免使用脚本)的最佳方法是首先创建一个异步处理程序: public async Task<IActionResult> About() { var cts = new CancellationTokenSource(); cts.CancelAfter(180000);

我需要在控制器中以编程方式增加应用程序中特定控制器操作的请求超时

到目前为止,我发现处理长时间运行的脚本(如果您的应用程序无法避免使用脚本)的最佳方法是首先创建一个异步处理程序:

public async Task<IActionResult> About()
    {
            var cts = new CancellationTokenSource();            
            cts.CancelAfter(180000);
            await Task.Delay(150000, cts.Token);
        return View();
    }
公共异步任务About() { var cts=新的CancellationTokenSource(); 取消后的关税(180000); 等待任务延迟(150000,cts.Token); 返回视图(); } 在上面的代码片段中,我添加了一个取消令牌,表示我的异步方法应该在180秒后取消(即使在本例中它的延迟不会超过150秒),我添加了超时,以确保脚本可以运行的时间有上限

如果运行此命令,您将收到HTTP错误502.3,因为在httpPlatform上设置了00:02:00的超时

要延长此超时,请转到wwwroot文件夹中的web.config文件,并向httpPlatform元素添加requestTimeout=“00:05:00”属性。例如:

<httpPlatform requestTimeout="00:05:00" processPath="%DNX_PATH%" arguments="%DNX_ARGS%" stdoutLogEnabled="false" startupTimeLimit="3600"/>

长时间运行的脚本现在应该可以工作了


但是,这意味着任何请求都需要5分钟才能超时,因此您必须确保使用CancellationToken技巧来限制应用程序中的任何异步请求。在以前版本的MVC中,我们有可以添加到控制器中的AsyncTimeOut属性,但是MVC6中似乎已经删除了该属性

感谢您提供了非常有趣的答案,但这对于我的问题来说是不可接受的:“然而,这意味着任何请求都需要5分钟才能超时…”我只需要编程解决方案,不需要任何web.config干预。据我所知,由于IIS是DNX的代理,因此没有编程方式来实现这一点。如果不编辑该值,则请求将始终在2minutes@MartinBeeby现在添加这一行会导致应用程序在启动时失败,默认情况下那里似乎没有
节点