我有两个类似于以下订阅OnSendingHeaders
事件的中间件。一个设置一些标题,另一个删除一些标题:
public class Middleware1 : OwinMiddleware
{
public Middleware1(OwinMiddleware next) : base(next)
{
}
public override async Task Invoke(IOwinContext context)
{
context.Response.OnSendingHeaders(state =>
{
var res = (OwinResponse)state;
// im removing some headers
}, context.Response);
await Next.Invoke(context);
}
}
public class Middleware2 : OwinMiddleware
{
public Middleware2(OwinMiddleware next) : base(next)
{
}
public override async Task Invoke(IOwinContext context)
{
context.Response.OnSendingHeaders(state =>
{
var res = (OwinResponse)state;
// im setting some headers
}, context.Response);
await Next.Invoke(context);
}
}
我还有web api控制器,可以创建excel和pdf文档并返回IHttpActionResult
。这段代码按预期工作。
但是,当我向返回pdf / excel文档的控制器发出请求时,在发送标头后,响应会在浏览器中止。响应将作为http状态代码200
发回,并发送正确的Content-Length
标头,但要下载的文件将被中止。
此错误似乎与订阅OnSendingHeaders
事件有关。因为如果我删除中间件或设置/删除标题而不订阅事件(直接调用context.Response.Headers
),一切正常。
这个事件不应该被多次订阅,或者是否会导致这个问题?