2015-06-18 3 views
1

У меня есть простой промежуточное программное обеспечение:vNext Owin Middleware

public class MiddlewareInterceptor 
{ 
    RequestDelegate _next; 
    public MiddlewareInterceptor(RequestDelegate next) 
    { 
     _next = next; 
    } 

    public Task Invoke(HttpContext ctx) 
    { 
     ctx.Response.WriteAsync("<h2>From SomeMiddleWare</h2>"); 
     return _next(ctx); 
    } 
} 

И в моем методе Startup.cs Configure, я подключить его следующим образом:

app.UseMiddleware<MiddlewareInterceptor>(); 

выше строит и приложение, кажется, бежит отлично, но моя точка останова в методе Invoke перехватчика никогда не попадает. Точно так же никогда не бывает выхода. Я тоже пробовал это с Debug.WriteLine.

Теперь, я попробовал этот метод:

public class MiddlewareInterceptor : OwinMiddleware 
{ 
    public MiddlewareInterceptor(OwinMiddleware next) : base(next){} 

    public override async Task Invoke(IOwinContext context) 
    { 
     Debug.WriteLine(context.Request.Uri.ToString()); 
     await Next.Invoke(context); 
    } 
} 

И в моем методе Startup.cs Configure, я подключить его следующим образом:

app.Use(next => new MiddlewareInterceptor(next).Invoke); 

К сожалению, конструктор базового OwinMiddleware ищет следующий OwinMiddleware в качестве параметра, в отличие от старых. RequestDelegate. Так что мой app.Use экземпляр моего MiddlewareInterceptor терпит неудачу, потому что next имеет тип RequestDelegate.

Наконец, я попробовал функцию встроенной непосредственно в методе Configure который также никогда не попадет в точке останова:

app.Use(async (ctx, next) => 
{ 
    System.Diagnostics.Debug.WriteLine("Hello"); 
    await next(); 
}); 

Так как он стоит, кажется, что я не могу сделать основной промежуточный перехватчик с помощью Owin. Что мне не хватает?

+0

http://blogs.msdn.com/b/webdev/archive/2014/11/14/katana-asp-net-5-and-bridging-the-gap.aspx – davidfowl

ответ

5

Каков порядок вышеупомянутого промежуточного программного обеспечения в конвейере? Удостоверьтесь, что это выполняется перед тем, что завершает часть запроса в конвейере; например. UseMvc();

+1

Замечательно знать, и спасибо , Это было действительно заменено после UseMvc(). Ты жжешь – Suamere

Смежные вопросы