OWIN 根据情况停止处理?

Sno*_*owy 3 http asp.net-web-api owin katana

我的 OWIN Startup 类中有以下代码:

myiapbuilder.Map("/something/something", doit =>
{
    doit.Use<pipepart1>();
    doit.Use<pipepart2>();
    doit.Use<piprpart3>();
});
Run Code Online (Sandbox Code Playgroud)

如果在 Pipepart1 中出现我不喜欢的情况,我想在该中间件中向调用者编写自定义文本/纯文本响应,并且不触发 Pipepart2 或 Pipepart3。CodePlex 上的 BranchingPipelines 示例显示了很多内容,但并非如此。

是否可以根据早期的中间件评估来短路流程或以其他方式停止中间件的 OWIN 处理?

Kir*_*lla 5

如果您打算直接从 响应客户端pipepart1,那么您可以避免调用管道中的其他中间件。下面是一个例子。这是你想到的吗?

在这里,根据某些条件(在我的情况下,如果查询字符串具有特定的键),我决定直接响应客户端或调用下一个中间件。

appBuilder.Map("/something/something", doit =>
{
    doit.Use<Pipepart1>();
    doit.Use<Pipepart2>();
});

public class Pipepart1 : OwinMiddleware
{
    public Pipepart1(OwinMiddleware next) : base(next) { }

    public override Task Invoke(IOwinContext context)
    {
        if (context.Request.Uri.Query.Contains("shortcircuit"))
        {
            return context.Response.WriteAsync("Hello from Pipepart1");
        }

        return Next.Invoke(context);
    }
}

public class Pipepart2 : OwinMiddleware
{
    public Pipepart2(OwinMiddleware next) : base(next) { }

    public override Task Invoke(IOwinContext context)
    {
        return context.Response.WriteAsync("Hello from Pipepart2");
    }
}
Run Code Online (Sandbox Code Playgroud)