[英]Strange behaviour with HTTP Headers with curl on MacOS vs. ASP.Net Web API
今天,我遇到了一個非常奇怪的問題,無論我最終找到了解決方案,都在尋找有關此處發生情況的一些解釋。
我在ASP.Net Web API 2中有一個控制器,我必須檢查HTTP標頭值,請參閱以下兩個片段:
IEnumerable<string> requestClientIds;
var hasClientId = Request.Headers.TryGetValues("X-ClientId", out requestClientIds);
if (hasClientId)
{
var clientId = requestClientIds.FirstOrDefault();
// Do something with client ID value here
}
和:
var clientIdHeader = Request.Headers.FirstOrDefault(x => x.Key == "X-ClientId");
if (clientIdHeader.Value != null)
{
var clientId = clientIdHeader.Value.FirstOrDefault();
// Do something with client ID value here
}
在我的理解中,這些代碼基本上具有相同的功能,並且兩個版本都可以完美地與API客戶端(與Postman嘗試)一起使用,也可以與Windows和Mac OS上的curl完美配合。
但是,有一個例外:如果通過Mac OS通過https進行curl調用了API端點,則第二個片段無法讀取X-ClientID標頭的值! 在這種情況下,X-ClientID標頭沒有值。 即使在MacOS上,也可以通過普通HTTP進行卷曲。
這是我嘗試使用curl的方法:
curl -H "X-ClientId: TEST" --request GET "https://path.to/my/api/endpoint"
關於MacOS第二種方法為何失敗的任何想法-curl-https?
正如r1verside指出的,這是區分大小寫的問題。 顯然,如果請求通過https進行,則OSX上的curl會將所有提供的標頭值轉換為小寫-因此FirstOrDefault方法將找不到標頭。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.