我正在尝试设置WebHookHandler
为.Net Core
项目接收 Json 数据。我知道Webhook
理论上是如何工作的。
除了示例源代码之外,还有大量可用于接收 WebHook 的信息。但我需要一个例子.Net Core
吗?
我正在尝试设置WebHookHandler
为.Net Core
项目接收 Json 数据。我知道Webhook
理论上是如何工作的。
除了示例源代码之外,还有大量可用于接收 WebHook 的信息。但我需要一个例子.Net Core
吗?
我们确实希望支持 ASP.NET Core 的 WebHooks,但它仍在开发中。同时,您也许可以查看处理程序代码并为 ASP.NET Core 执行类似的操作。
希望这可以帮助!
亨里克
.NET Core 目前不支持 WebHooks https://github.com/aspnet/WebHooks/issues/5
这是我使用 Azure 警报的一个非常基本的示例:
using Microsoft.AspNetCore.Mvc;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace ApplicationInsightsMonitor.Controllers
{
[Produces("application/json")]
[Route("api/alerts")]
public class AlertController : Controller
{
[HttpPost]
public async Task<ActionResult> Post([FromBody] AIPayloadModel payload)
{
if (payload == default(AIPayloadModel))
{
return NotFound();
}
// Save to database
return Ok();
}
}
public class AIPayloadModel
{
public enum AIPayloadStatus
{
Activated,
Resolved
}
public class AIPayloadContextModel
{
public enum AIConditionType
{
Metric,
Event
}
public enum AIMetricUnit
{
Bytes,
BytesPerSecond,
Count,
CountPerSecond,
Percent,
Seconds
}
public enum AIAggregation
{
Average,
Last,
Maximum,
Minimum,
None,
Total
}
public class AICondition
{
[JsonProperty("metricName")]
public String Name { get; set; }
[JsonProperty("metricUnit")]
public AIMetricUnit Units { get; set; }
[JsonProperty("metricValue")]
public Decimal Value { get; set; }
[JsonProperty("threshold")]
public Decimal Threshold { get; set; }
[JsonProperty("windowSize")]
public TimeSpan WindowSize { get; set; }
[JsonProperty("timeAggregation")]
public AIAggregation Aggregation { get; set; }
[JsonProperty("operator")]
public String Operator { get; set; }
}
[JsonProperty("timestamp")]
public DateTime Time { get; set; }
[JsonProperty("id")]
public String Id { get; set; }
[JsonProperty("name")]
public String Name { get; set; }
[JsonProperty("description")]
public String Description { get; set; }
[JsonProperty("conditionType")]
public AIConditionType ConditionType { get; set; }
[JsonProperty("condition")]
public AICondition Condition { get; set; }
[JsonProperty("subscriptionId")]
public String SubscriptionId { get; set; }
[JsonProperty("resourceGroupName")]
public String ResourceGroupName { get; set; }
[JsonProperty("resourceGroupType")]
public String ResourceGroupType { get; set; }
[JsonProperty("resourceName")]
public String ResourceName { get; set; }
[JsonProperty("resourceType")]
public String ResourceType { get; set; }
[JsonProperty("resourceRegion")]
public String ResourceRegion { get; set; }
[JsonProperty("portalLink")]
public String PortalLink { get; set; }
}
[JsonProperty(PropertyName = "status")]
public AIPayloadStatus Status { get; set; }
[JsonProperty(PropertyName = "context")]
public AIPayloadContextModel Context { get; set; }
[JsonProperty(PropertyName = "properties")]
public Dictionary<String, String> Properties { get; set; } = new Dictionary<String, String>();
}
}
关键是在参数上使用 [FromBody] 并在模型中进行正确的 JSON 反序列化。