如何理想地将服务器端 Application Insights 遥测集成到我的 Umbraco / Articulate 网站中?
How to integrate server side Application Insights telemetry into my Umbraco / Articulate web site ideally?
我通过执行以下操作创建了一个 Umbraco 网站
- 打开Visual Studio
- 创建一个新的空 MVC 项目
- 添加了current Umbraco nuget package
- 在 Azure 中托管项目
- 成功执行 Umbraco 安装程序
- 安装了 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 事件处理程序中注册您的过滤器,这应该有效。
我通过执行以下操作创建了一个 Umbraco 网站
- 打开Visual Studio
- 创建一个新的空 MVC 项目
- 添加了current Umbraco nuget package
- 在 Azure 中托管项目
- 成功执行 Umbraco 安装程序
- 安装了 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 事件处理程序中注册您的过滤器,这应该有效。