Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在ASP.NET Core中正常中止SSE请求_C#_.net_Asp.net Core_Server Sent Events - Fatal编程技术网

C# 在ASP.NET Core中正常中止SSE请求

C# 在ASP.NET Core中正常中止SSE请求,c#,.net,asp.net-core,server-sent-events,C#,.net,Asp.net Core,Server Sent Events,我正在中间件中实现SSE public async Task InvokeAsync(HttpContext context) { var request = context.Request; if (request.Headers.ContainsKey("Accept") && request.Headers["Accept"].Equals("text/event-stream")) {

我正在中间件中实现SSE

public async Task InvokeAsync(HttpContext context)
{
    var request = context.Request;

    if (request.Headers.ContainsKey("Accept") && request.Headers["Accept"].Equals("text/event-stream"))
    {
        try
        {
            // do something that can throw exception

            context.Response.Headers["Content-Type"] = "text/event-stream";
            await context.Response.Body.FlushAsync();
        }
        catch (Exception e)
        {
            context.Abort();
        }
    }
    else
    {
        await _next(context);
    }
}
当异常发生并且上下文被中止时,我总是得到这个错误

ProcessRequestAsync
System.InvalidOperationException: Headers already sent.
   at Microsoft.AspNetCore.Server.HttpSys.Response.CheckResponseStarted()
   at Microsoft.AspNetCore.Server.HttpSys.Response.set_CacheTtl(Nullable`1 value)
   at Microsoft.AspNetCore.Server.HttpSys.FeatureContext.ConsiderEnablingResponseCache()
   at Microsoft.AspNetCore.Server.HttpSys.FeatureContext.<OnResponseStart>d__131.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.ValidateEnd(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.GetResult()
   at Microsoft.AspNetCore.Server.HttpSys.MessagePump.<ProcessRequestAsync>d__23.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Microsoft.AspNetCore.Server.HttpSys.MessagePump.<ProcessRequestAsync>d__23.MoveNext()
我如何才能优雅地中止上下文而不出现异常


谢谢。

您能告诉我您什么时候打电话给我吗?请共享您的startup.cs代码。@BrandoZhang I在启动时注册了中间件,通常
app.usessembiddleware()。而中间件将在UI装载事件中被调用。SSemidleware是您的客户中间件,我们需要知道您何时调用此中间件以及此SSemidleware是什么。如果您只是创建一个自定义中间件,它将不会抛出此错误。另外,你能告诉我什么是UI挂载事件吗?SSE是服务器发送的事件。这是我在UI中的调用方式:您可以共享startup.cs Configure方法相关代码吗?
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    app.UseSseMiddleware<SseMiddleware>();
    app.UseResponseCompression();
    app.UseStaticFiles();
    app.UseCors("CorsPolicy");
    app.UseAuthentication();
    app.UseMvc();
    app.UseSwagger();
    app.UseSwaggerUi3();
}