C#-Azure函数:如何在调用“HTTP触发器”天青功能时将消息记录到队列存储器?
我在C#中使用“HTTP触发器”的天蓝色功能。当我使用“HTTP触发器”调用azure函数时,我想将消息记录到队列存储器中。C#-Azure函数:如何在调用“HTTP触发器”天青功能时将消息记录到队列存储器?
当“HTTP触发器”被调用时,它会在其他地方记录一条消息(log.info(“C#Http trigger ....”);)但我希望将此日志消息与ipaddress一起(当用户发出请求时到“HTTP触发”功能)存储在队列存储 (log.info(“C#队列触发器”,ipaddress)),以便我可以阻止客户端ipaddress一天,如果用户打电话给超过尝试次数第二天,我可以取消阻止客户端ipaddress通过从云中的队列存储运行计时器触发器中的所有ipaddress。
有没有可能实现这个或者是否有任何替代方式来存储ipaddress而不是队列存储?
从你写的东西我猜,你想提供某种类型的API给你的用户,并希望限制访问。为了实现这一点,我宁愿建议使用Azure API管理(https://azure.microsoft.com/en-us/services/api-management/)。它为您提供访问报价,该报价根据不同的标准限制用户访问API端点。它还提供了更多:用户管理,付款,订阅,安全等等。
为了您与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
设置为ClientIP
或ClientIP + ApiName
,也可以添加其他列(Timestamp,TotalRequests等)。另外,您可以参考Azure Storage Table Design Guide设计您的存储表。
对于您的天蓝色功能,您可以使用Storage table bindings和Table Storage SDK来读取特定IP的请求日志并更新特定IP的总请求数。而且,这里有一个类似的博客,你可以参考here。
UPDATE:
您可以配置日志存储在文件系统或Blob存储 “监控>诊断日志” 下,如下所示:
对于应用程序日志记录(Filesystem),您可以通过kudu找到日志:
对于应用程序日志记录(BLOB),你可以充分利用Storage Explorer取回你的日志。
哪里有“Http触发”日志消息?我认为它可能会将该日志消息存储到某个存储。 –
我用一些细节更新了我的答案,你可以参考它。 –
如果你想根据他的IP阻止用户(由于动态IP地址非常不安全),那么只需存储此IP地址的最后一次“溢出”访问,并检查上次访问是否过去24小时...对于存储你可以使用DocumentDB,CosmosDB或RedisCache。也许还有Azure存储,但我会选择前者。 – sebastian87