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

我用一些细节更新了我的答案,你可以参考它。 –

相关问题