【问题标题】:How to setup WebHookReceiver manually for .Net Core?如何为 .Net Core 手动设置 WebHookReceiver?
【发布时间】:2016-12-16 08:15:38
【问题描述】:

我正在尝试设置 WebHookHandler 以接收 .Net Core 项目的 Json 数据。我知道Webhook 在理论上是如何工作的。

除了sample source code 之外,还有大量可用于接收 WebHook 的信息。但我需要.Net Core 的示例?

【问题讨论】:

标签: asp.net asp.net-web-api asp.net-core webhooks asp.net-webhooks


【解决方案1】:

我们确实希望支持 ASP.NET Core 的 WebHooks,但它仍在开发中。同时,您也许可以查看处理程序代码并为 ASP.NET Core 执行类似的操作。

希望这会有所帮助!

亨里克

【讨论】:

    【解决方案2】:

    .NET Core 目前不支持 WebHooks https://github.com/aspnet/WebHooks/issues/5

    【讨论】:

    • 想知道,是否可以自己实现?
    【解决方案3】:

    这是我使用 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 反序列化。

    【讨论】:

      猜你喜欢
      • 2022-01-22
      • 2020-07-01
      • 2019-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多