2017-09-08 11 views
1

미들웨어 클래스가 없어 질 때까지 성공적으로 실행되는 미들웨어 클래스가 3 개 있습니다. 미들웨어 클래스가 호출 된 후 더 이상 라우터에 요청을 전달하고 싶습니다.OWIN 미들웨어 이후에 IAppBuilder.UseWebApi를 사용하는 방법

가장 좋은 방법은 무엇입니까?

// Register middleware. Order is important! 
app.Use<Authentication>(); 
app.Use<Logging>(); 
app.Use<Example>(configExample); 

이 모든 후, Logging 다음, Example 먼저 Authentication 실행을 요청 expected.On으로 작동합니다

예를 들어,이 코드가 있습니다.

그리고 프로그램을 시작할 때 이러한 app.Use<>() 라인이 대리인을 전달하여 적절한 미들웨어를 인스턴스화한다는 것을 알 수 있습니다. 이 대리자에는 실행될 다음 미들웨어 클래스를 가리키는 속성 Target이 포함되어 있습니다. 명백한 이유로 Example 클래스에 전달 된 델리게이트는 비어 있습니다 (체인의 마지막 미들웨어 클래스이기 때문에).

마지막 체인이 연결된 미들웨어 클래스의 코드를 변경하지 않고 (중요한 순서는 마음에 들지 않습니다.) 라우터를 어떻게 호출 할 수 있습니까? 나는 미들웨어 체인

답변

0

대답은 미들웨어가 전달되는 것입니다을 종료 할 수있는 논리적 인 방법이 있어야하기 때문에 나의 이해에 어떤 ​​좋은 논리적 차이가 있어야합니다 생각

HttpConfiguration config = new HttpConfiguration(); 
config.Routes.MapHttpRoute(
    ... 
); 
config.Routes.MapHttpRoute(
    ... 
); 
etc. 
app.UseWebApi(config); 

: 내 라우터는 다음과 같이 보입니다 미들웨어가 더 이상 없을 때 컨트롤러에 자동으로 연결됩니다. 하지만 내가 따라 갔던 튜토리얼은 미들웨어에서 이것을 방지하는 코드 라인을 사용했다.

여기에 미들웨어를 만드는 방법에 대한 지침은 다음과 같습니다 : https://www.codeproject.com/Articles/864725/ASP-NET-Understanding-OWIN-Katana-and-the-Middlewa.

이 두 라인 :

IOwinContext context = new OwinContext(environment); 
await context.Response.WriteAsync("<h1>Hello from Example " + _configExample + "</h1>"); 

컨트롤러로부터의 응답 결과는 절단 (또는 일)된다. 다음 코드입니다 :

using System; 
using System.Collections.Generic; 
using System.Threading.Tasks; 

namespace Avesta.ASP.Middleware 
{ 
    using AppFunc = Func<IDictionary<string, object>, Task>; 

    public class Example 
    { 
     AppFunc _next; 
     string _configExample; 

     public Example(AppFunc next, string configExample) 
     { 
      _next = next; 
      _configExample = configExample; 
     } 

     public async Task Invoke(IDictionary<string, object> env) 
     { 
      //IOwinContext context = new OwinContext(environment); 
      //await context.Response.WriteAsync("<h1>Hello from Example " + _configExample + "</h1>"); 
      await _next.Invoke(env); 
     } 
    } 
}