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 に答える