2013-09-23 7 views
3

내 OWIN 시작 클래스에 아래의 코드를 가지고 :OWIN 컨텍스트 기반 처리 중지 하시겠습니까?

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

조건이 내가 pipepart1에서 좋아하지 않아 발생하는 경우, 그 미들웨어 내에서 호출자에게 사용자 정의 텍스트/일반 응답을 작성하려합니다 , pipepart2 또는 pipepart3을 실행하지 마십시오. CodePlex의 BranchingPipelines 샘플은 많은 것을 보여 주지만 그 점은 아닙니다.

이전 Middleware 평가를 기반으로 Middleware의 OWIN 처리를 중단하거나 중지 할 수 있습니까?

감사합니다.

답변

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

Super cool. OWIN 호스트 런타임을 작동시키지 않고도 통합 테스트 또는 단위 테스트에 대한 마찰없는 방법을 알고 계십니까? – Snowy

+0

Microsoft.Owin.Testing 패키지에는 많은 사람들이 단위 테스트 OWIN 응용 프로그램에 사용하는 TestServer가 있습니다. 이 메모리 서버는 동작 (사용자의 구성 방법)을 받아 http listener를 실제로 시작하지 않고 와이어를 건드리지 않고도 OWIN 서버를 실행합니다. 참고 : 이것은 아직 출시 전입니다. – Praburaj

+0

var server = TestServer.Create (YourConfigMethod); var httpResponse = server.WithPath ("/"). SendAsync ("GET")는이 TestServer의 사용 예입니다. – Praburaj