Ocelot中文文件-轉換Headers

loogn發表於2018-05-08

Ocelot允許在請求下游服務之前和之後轉換頭部.目前Ocelot只支援查詢和替換.這個功能在Github #190提出.我確定這個功能可以在各個方面發揮作用。

新增到請求

這個功能在GitHub #313被提出。

如果你想在你的上游請求中新增一個頭,請在ocelot.json檔案的ReRoute中新增如下配置:

"UpstreamHeaderTransform": {
    "Uncle": "Bob"
}

上面例子中,一個鍵為Uncle,值為Bob的頭將被新增到上游服務中。

也支援佔位符(看下面)。

新增到相應

這個功能在GitHub #280被提出。

如果你想在你的下游響應中新增一個頭,請在ocelot.json檔案的ReRoute中新增如下配置:

"DownstreamHeaderTransform": {
    "Uncle": "Bob"
},

上面例子中,當請求一個特定ReRoute的時候,Ocelot將返回一個鍵為Uncle,值為Bob的頭。

如果你想返回Butterfly 跟蹤id,需要像下面這樣...

"DownstreamHeaderTransform": {
    "AnyKey": "{TraceId}"
},

查詢並替換

為了變換頭,首先我們指定頭的鍵,然後指定我們想要的變換內容,例如

"Test": "http://www.bbc.co.uk/, http://ocelot.com/"

上面鍵是"Test",值是“http://www.bbc.co.uk/,http://ocelot.com/”,這個值的意思是使用http://ocelot.com/替換http://www.bbc.co.uk/,語法是{find},{replace}。希望還算簡單明瞭,更多解釋在下面例子中。

下游請求之前

在ocelot.json的ReRoute中新增如下配置 ,以便用http://ocelot.com/替換http://www.bbc.co.uk/ .Test頭將被替換併傳送到下游服務.

 "UpstreamHeaderTransform": {
    "Test": "http://www.bbc.co.uk/, http://ocelot.com/"
},

下游請求之後

在ocelot.json的ReRoute中新增如下配置 ,以便用http://ocelot.com/替換http://www.bbc.co.uk/ . 當Ocelot收到下游服務響應之後將進行替換.

"DownstreamHeaderTransform": {
    "Test": "http://www.bbc.co.uk/, http://ocelot.com/"
},

佔位符

Ocelot允許在頭不轉換中使用佔位符.

{BaseUrl} - 這個是Ocelot的基本url. 例如http://localhost:5000/. {DownstreamBaseUrl} - 這個是下游服務的基本url 例如http://localhost:5001/. 目前這個只在DownstreamHeaderTransform中起作用. {TraceId} - 這個是Butterfly的跟蹤id.目前這個也只在DownstreamHeaderTransform中起作用.

處理 302 重定向

Ocelot預設會自動遵循重定向,但是如果您想將location頭返回給客戶端,您可能需要將location更改為Ocelot而不是下游服務。 Ocelot可以使用以下配置實現。

"DownstreamHeaderTransform": {
    "Location": "http://www.bbc.co.uk/, http://ocelot.com/"
},
 "HttpHandlerOptions": {
    "AllowAutoRedirect": false,
},

你也可以使用BaseUrl佔位符.

"DownstreamHeaderTransform": {
    "Location": "http://localhost:6773, {BaseUrl}"
},
 "HttpHandlerOptions": {
    "AllowAutoRedirect": false,
},

最後,如果你使用負載均衡的話,你將得到多個下游基地址,所以像上面那樣是不能正常工作的.在這種情況下你可以如下配置.

"DownstreamHeaderTransform": {
    "Location": "{DownstreamBaseUrl}, {BaseUrl}"
},
 "HttpHandlerOptions": {
    "AllowAutoRedirect": false,
},

未來

理想情況下,這個特效能夠支援實際上頭部可以有多個值的情況。目前只是假設一個。 如果它可以查詢和替換多個值應該是非常棒的。

"DownstreamHeaderTransform": {
    "Location": "[{one,one},{two,two}"
},
 "HttpHandlerOptions": {
    "AllowAutoRedirect": false,
},

如果有人想在這一展身手,請自己搞定吧!

相關文章