如何理想地将服务器端 Application Insights 遥测集成到我的 Umbraco / Articulate 网站中?

How to integrate server side Application Insights telemetry into my Umbraco / Articulate web site ideally?

我通过执行以下操作创建了一个 Umbraco 网站

  1. 打开Visual Studio
  2. 创建一个新的空 MVC 项目
  3. 添加了current Umbraco nuget package
  4. 在 Azure 中托管项目
  5. 成功执行 Umbraco 安装程序
  6. 安装了 current Articulate package

现在我想整合Application Insights。客户端部分非常简单,我只需要在主视图中添加一些 JavaScript 代码。

对于服务器端部分,我需要添加以下代码:

using System;
using System.Web.Mvc;
using Microsoft.ApplicationInsights;

namespace MVC2App.Controllers
{
    [AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)] 
    public class AiHandleErrorAttribute : HandleErrorAttribute
    {
        public override void OnException(ExceptionContext filterContext)
        {
            if (filterContext != null && filterContext.HttpContext != null && filterContext.Exception != null)
            {
                //If customError is Off, then AI HTTPModule will report the exception
                if (filterContext.HttpContext.IsCustomErrorEnabled)
                {  
                    // Note: A single instance of telemetry client is sufficient to track multiple telemetry items.
                    var ai = new TelemetryClient();
                    ai.TrackException(filterContext.Exception);
                } 
            }
            base.OnException(filterContext);
        }
    }
}
// then register AiHandleErrorAttribute in FilterConfig:
public class FilterConfig
{
   public static void RegisterGlobalFilters(GlobalFilterCollection filters)
   {
     filters.Add(new AiHandleErrorAttribute());
   }
}

我的问题详细如下:

我如何在 Umbraco 核心中尽可能少地接触理想地集成此代码,以使将来的更新尽可能容易?集成代码的最佳方法是什么?

我是否需要接触 Umbraco 核心,或者是否可以只更改 Articulate 代码?或者更好:我可以创建自己的 Umbraco 包,它可以将 Application Insights 功能添加到我的 Umbraco 实例(可能是客户端和服务器端部分)吗?

您不需要为此接触 Umbraco 核心。你可以很容易地把它作为你自己的自定义代码来做,然后你可以把它变成一个插件。您可以将属性添加为 class,并将其挂钩,而不是 FilterConfig 事件,您可以使用 Umbraco 启动处理程序:https://our.umbraco.org/documentation/reference/events/application-startup

您可以在启动处理程序的 ApplicationStarted 事件处理程序中注册您的过滤器,这应该有效。