日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

注意.NET Core进行请求转发问题

發布時間:2023/12/4 asp.net 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 注意.NET Core进行请求转发问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【導讀】近日,有關注我公眾號的小伙伴私信我,遇到一個問題搞了很久沒解決,此問題具有參考意義,這里跟大家分享下,希望對你能有所幫助

內網環境跟外網隔離,現在外網的請求都需要一個專用服務器轉接到內網處理,用app.UseRewriter轉接, 從外網服務器轉發到內網服務器的時候Header 里面的Authorization居然丟失了,重新設置RewriteContext.HttpContex Header也不行,有沒有辦法解決?

當時我的想法是,實在不行,在外網將token直接放到url或body里不就完事,這樣的話,外網每增加一個接口,都得將token取出然后進行轉換,內網以相同方式獲取,這是小伙伴所不能忍受。

轉發問題

這里我們創建兩個Web應用程序,然后添加自定義轉發規則。首先我們在第一個Web應用程序創建針對如下接口請求轉發規則

public?class?RewriteForwardRules {public?static?void?RedirectRequests(RewriteContext?context){var?request?=?context.HttpContext.Request;if?(request.Path.Value.StartsWith("/api/forward",?StringComparison.OrdinalIgnoreCase)){var?response?=?context.HttpContext.Response;response.Headers[HeaderNames.Location]?=?"http://localhost:8091/api/custom";context.Result?=?RuleResult.EndResponse;}} }

然后在startup中注入我們自定義轉發規則

app.UseRewriter(new?RewriteOptions().Add(RewriteForwardRules.RedirectRequests));

當然,如果URL(GET請求)或Body(POST請求)中包含其他參數,將其對應轉發寫入URL或Body即可,這里token已存儲在請求頭中,所以我們直接轉發請求即可

接下來我們通過Postman模擬外網發出如下POST請求

緊接著,我們在第二個Web應用程序中來接收轉發請求,并獲取token信息

[HttpPost] public?IActionResult?Custom() {var?token?=?Request.Headers[HeaderNames.Authorization].ToString();return?Ok(token); }

然后我們一運行,發現結果都沒轉發到對應內網應用程序,這是為何呢?

狀態碼(308)設置

事實上,轉發請求涉及到資源重分配指向另一URL問題,當然我們需要注意的是,既然是轉發請求,勢必轉發者和接受者請求方式必須一致,要不然肯定不行。所以我們必須顯式指定重定向狀態碼,設置為308,如下:

針對狀態碼308的意思,我們可以參看.NET Core中對于狀態碼枚舉解釋:永久重定向,原始請求方式和目標請求方式必須一致,支持原始請求和目標請求同為GET或POST。

.NET Core中關于此狀態碼的解釋并不那么詳細,我們來到專對狀態碼官方解釋(https://httpstatuses.com/308),這里我貼下谷歌翻譯后的中文

308永久重定向:已為目標資源分配了一個新的永久URI,以后對該資源的任何引用都應使用其中一個URI。

具有鏈接編輯功能的客戶端應在可能的情況下自動將對有效請求URI的引用重新鏈接到服務器發送的一個或多個新引用。

服務器應在響應中生成一個Location頭字段,其中包含新的永久URI的首選URI引用。用戶代理可以使用位置字段值進行自動重定向。服務器的響應有效負載通常包含簡短的超文本注釋,其中包含指向新URI的超鏈接。

默認情況下,308響應可緩存;即,除非方法定義或顯式緩存控制

狀態碼(301)設置

我們也可以指定響應狀態碼為301,

response.StatusCode?=?301;

當然此時內網接收程序必須改為GET,如下:

301永久移動:已為目標資源分配了一個新的永久URI,以后對該資源的任何引用都應使用其中一個URI。

那么狀態碼301和308到底有何區別呢???301類似308永久移動,只不過,301不允許將請求方法從GET更改為POST??

?????請求轉發時注意設置狀態碼為301或308

?????301類似308永久移動,只不過,301不允許將請求方法從GET更改為POST

?????基于以上所述,請求轉發推薦使用狀態碼308

總結

以上是生活随笔為你收集整理的注意.NET Core进行请求转发问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。