2013-09-23 29 views
3

我有我的OWIN啓動類下面的代碼:OWIN基於Contition的停止處理?

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

如果發生的情況,我不喜歡pipepart1,我想編寫一箇中間件內的自定義文本/平原呼叫者響應,並且不要激發pipepart2或pipepart3。 CodePlex上的BranchingPipelines示例顯示了很多東西,但不是。

基於早期的中間件評估,是否有可能短流程流或以其他方式停止中間件的OWIN處理?

謝謝。

回答

4

如果您打算直接從pipepart1響應客戶端,那麼您可以避免調用管道中的其他中間件。以下是一個例子。這是你想到的嗎?

這裏基於一些條件(在我的情況下,如果querystring有一個特定的鍵),我決定直接響應客戶端或調用下一個中間件。

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"); 
    } 
} 
+0

超酷。你知道無摩擦的集成測試或單元測試的方式,而無需啓動OWIN主機運行時? – Snowy

+0

Microsoft.Owin.Testing包中有許多人用來測試OWIN應用程序的TestServer。這是一個內存服務器,它接受一個Action (您的配置方法)並運行OWIN服務器,而不實際啓動http偵聽器並且不觸摸電線。注意:雖然這仍然在預發佈中。 – Praburaj

+0

var server = TestServer.Create(YourConfigMethod); var httpResponse = server.WithPath(「/」)。SendAsync(「GET」)是此TestServer的一個示例用法。 – Praburaj