0

我在C#中使用「HTTP觸發器」的天藍色功能。當我使用「HTTP觸發器」調用azure函數時,我想將消息記錄到隊列存儲器中。C#-Azure函數:如何在調用「HTTP觸發器」天青功能時將消息記錄到隊列存儲器?

當「HTTP觸發器」被調用時,它會在其他地方記錄一條消息(log.info(「C#Http trigger ....」);)但我希望將此日誌消息與ipaddress一起(當用戶發出請求時到「HTTP觸發」功能)存儲在隊列存儲 (log.info(「C#隊列觸發器」,ipaddress)),以便我可以阻止客戶端ipaddress一天,如果用戶打電話給超過嘗試次數第二天,我可以取消阻止客戶端ipaddress通過從雲中的隊列存儲運行計時器觸發器中的所有ipaddress。

有沒有可能實現這個或者是否有任何替代方式來存儲ipaddress而不是隊列存儲?

回答

1

從你寫的東西我猜,你想提供某種類型的API給你的用戶,並希望限制訪問。爲了實現這一點,我寧願建議使用Azure API管理(https://azure.microsoft.com/en-us/services/api-management/)。它爲您提供訪問報價,該報價根據不同的標準限制用戶訪問API端點。它還提供了更多:用戶管理,付款,訂閱,安全等等。

+0

如果你想根據他的IP阻止用戶(由於動態IP地址非常不安全),那麼只需存儲此IP地址的最後一次「溢出」訪問,並檢查上次訪問是否過去24小時...對於存儲你可以使用DocumentDB,CosmosDB或RedisCache。也許還有Azure存儲,但我會選擇前者。 – sebastian87

0

爲了您與HTTP觸發Azure的作用下,獲取客戶端IP,你可以使用下面的代碼片段:

run.csx:

#r "System.Web" 

using System.Web; 
using System.Net; 

public static HttpResponseMessage Run(HttpRequestMessage req, TraceWriter log) 
{ 
    var address = ((HttpContextWrapper)req.Properties["MS_HttpContext"]).Request.UserHostAddress; 
    log.Info($"Your client IP: {address}"); 
    return req.CreateResponse(HttpStatusCode.OK, $"Your client IP: {address}"); 
} 

有關詳細信息,你可以請參閱此issue

,這樣我可以阻止客戶端ip地址了一天,如果用戶將調用API超越嘗試和第二天,我又可以通過採取從隊列存儲在雲中運行的定時器觸發所有的ip地址解除客戶端ip地址的數量。

我寧願使用表存儲來存儲特定IP的訪問日誌。您可以將PartitionKey列設置爲日期,將RowKey設置爲ClientIPClientIP + ApiName,也可以添加其他列(Timestamp,TotalRequests等)。另外,您可以參考Azure Storage Table Design Guide設計您的存儲表。

對於您的天藍色功能,您可以使用Storage table bindingsTable Storage SDK來讀取特定IP的請求日誌並更新特定IP的總請求數。而且,這裏有一個類似的博客,你可以參考here

UPDATE:

您可以配置日誌存儲在文件系統或Blob存儲 「監控>診斷日誌」 下,如下所示:

enter image description here

enter image description here

對於應用程序日誌記錄(Filesystem),您可以通過kudu找到日誌:

enter image description here

對於應用程序日誌記錄(BLOB),你可以充分利用Storage Explorer取回你的日誌。

+0

哪裏有「Http觸發」日誌消息?我認爲它可能會將該日誌消息存儲到某個存儲。 –

+0

我用一些細節更新了我的答案,你可以參考它。 –

相關問題