簡體   English   中英

在MacOS與ASP.Net Web API上使用帶有curl的HTTP標頭的奇怪行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM