Here is a very simple example that I worked with Azure Alerts:
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>(); } }
The key uses [FromBody] in the parameter and has the correct JSON deserialization in your model.
source share