为了您与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取回你的日志。
如果你想根据他的IP阻止用户(由于动态IP地址非常不安全),那么只需存储此IP地址的最后一次“溢出”访问,并检查上次访问是否过去24小时...对于存储你可以使用DocumentDB,CosmosDB或RedisCache。也许还有Azure存储,但我会选择前者。 – sebastian87