3

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

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

如果在 pipepart1 中出现我不喜欢的情况,我想在该中间件中为调用者编写自定义文本/纯文本响应,并且不要触发 pipepart2 或 pipepart3。CodePlex 上的 BranchingPipelines 示例显示了很多东西,但并非如此。

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

4

1 回答 1

4

如果您打算从 直接响应客户端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");
    }
}
于 2013-09-23T18:18:36.613 回答