2017-03-08 211 views
2

我有一個ASP.NET核心應用程序和一個簡單的OWIN中間件來檢查一些數據。但是我想只在請求頁面時運行中間件。現在它的運行時還需要資產,如圖像,CSS等。ASP.NET核心OWIN中間件

如何讓owin中間件代碼只在頁面請求上執行?

報名:

app.UseSiteThemer(); 

網站Themer擴展類:

public static class SiteThemerExtensions 
{ 
    public static IApplicationBuilder UseSiteThemer(this IApplicationBuilder builder) 
    { 
     return builder.UseMiddleware<SiteThemerMiddleware>(); 
    } 
} 

OWIN中間件:

public class SiteThemerMiddleware 
{ 
    private readonly RequestDelegate _next; 
    private readonly ISiteService _siteService; 

    public SiteThemerMiddleware(RequestDelegate next, ISiteService siteService) 
    { 
     _siteService = siteService; 
     _next = next; 
     //_logger = loggerFactory.CreateLogger<SiteThemerMiddleware>(); 
    } 

    public async Task Invoke(HttpContext context) 
    { 
     await Task.Run(() => 
     { 

      Console.Write("OWIN Hit"); 
     }); 


     //_logger.LogInformation("Handling request: " + context.Request.Path); 
     await _next.Invoke(context); 
     //_logger.LogInformation("Finished handling request."); 
    } 
} 
+0

添加它後面的管道比靜態文件處理中間件更多的細節? –

+0

向我們展示如何註冊您的中間件。密鑰可能會從註冊切換到。使用註冊.Map,但沒有隻是猜測的代碼。 – tpeczek

+0

@tpeczek我繼續前進並更新了我的代碼,謝謝! – TheWebGuy

回答

2

有ASP.NET核心管線的兩個方面,你可以使用你目標在這裏:訂購和分支。

有關訂購的規則非常簡單 - 中間件的添加順序是它們將要執行的順序。這意味着如果像你這樣的中間件放在一些可以結束流水線的中間件之後(例如靜態文件),它將不會被調用。

爲了分支管道,您可以使用MapMapWhen方法。第一個基於路徑分支管道,而另一個基於謂詞分支。僅在滿足分支條件時纔會調用添加了MapMapWhen的中間件。

您可以閱讀有關管道here