2016-06-09 32 views
1

我有一段我想提取到自定義中間件的ASP.NET Core代碼。具體來說,應執行以下邏輯:當請求某個路徑mapPath時,將該請求代理到另一個主機,由proxyUrl標識。調用其他中間件的中間件

下面的代碼在Startup.cs的伎倆:

var proxyUri = new Uri(proxyUrl); 
builder.Map(
    mapPath, 
    appMapped => 
    { 
     appMapped.RunProxy(
      new ProxyOptions 
       { 
        Scheme = proxyUri.Scheme, 
        Host = proxyUri.Host, 
        Port = proxyUri.Port.ToString() 
       }); 
    } 
); 

好吧,它採用app.Map()分支,然後將代理中間件代理請求。

(How)是否可以將此邏輯提取到自定義和可重用的中間件?或者我不能在這裏使用「真正的」中間件?我所能做的當然是寫一個擴展方法,例如app.UseMapProxy(),並將邏輯1:1放在那裏,但我只是想知道我是否也可以用「真正」的中間件類來完成它。

回答

1

這種設置最好封裝在IApplicationBuilder擴展方法中。您不會在現有組件之外添加任何每個請求功能,只需將它們連接在一起即可。

+0

好的,這就是我說'app.UseMapProxy()'方法時的意思 - 它只是一個擴展。我只是想知道它應該是一個「真正的」中間件。感謝您指出了這一點。 – Matthias

+0

還有一個問題:我將如何實現一個添加了真正的每個請求功能的組件,但也想使用其他中間件?將每個請求的東西提取到一個自定義的中間件中,並用IApplicationBuilder擴展中的其他中間件進行組合? – Matthias

+0

是的,這應該工作。 – Tratcher