owin中间件中OnSendingHeaders事件的多个订阅者

时间:2016-06-10 14:00:42

标签: asp.net-web-api owin

我有两个类似于以下订阅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),一切正常。

这个事件不应该被多次订阅,或者是否会导致这个问题?

0 个答案:

没有答案