我有一个带有mvc的web-api,它正在执行一堆启动初始化,这需要几分钟。我希望该URL在此期间以进度指示器响应请求。我的想法是使用中间件来实现以下目标:
public async Task Invoke(HttpContext httpContext)
{
await httpContext.Response.WriteAsync("Loading...");
await Task.Delay(5000); // the initialization-stuff (which is not started here but just waited on)
httpContext.Response.Clear();
await _next(httpContext); // continue to my MVC-page
}
但是,这似乎不起作用(ERR_INCOMPLETE_CHUNKED_ENCODING
)。如何正确清除/重置响应,以便初始化完成后可以编写新的真实响应。
我改用这样的东西(足够好):
public async Task Invoke(HttpContext httpContext)
{
if (!task.IsCompleted)
await httpContext.Response.WriteAsync("Loading...");
else
await _next(httpContext); // continue...
}
答案 0 :(得分:1)
一旦将数据发送到客户端,您将无法取回它。您无法替换现有页面,只能添加。
因此,您可以做两件事:
创建一个新的API终结点,以回复初始化状态。使页面每隔几秒钟轮询一次该端点。