将ExceptionLoggerContext强制转换为HttpContext

本文关键字:HttpContext 转换 ExceptionLoggerContext | 更新日期: 2023-09-27 18:16:52

我已经编写了一个实现System.Web.Http.ExceptionHandling.ExceptionLogger类的异常记录器。

我们有一个通用的异常日志记录服务,其中一个实现是针对RayGun的。它使用HttpContext.Current,如下所示:https://github.com/MindscapeHQ/raygun4net/blob/master/Mindscape.Raygun4Net/RaygunClient.cs在线337上。

public override void Log(ExceptionLoggerContext context)
{
    HttpContext.Current = ...;
    ExceptionService.LogException(context.Exception);            
}

是否可以转换/转换:System.Web.Http.ExceptionHandling.ExceptionLoggerContextSystem.Web.HttpContext

将ExceptionLoggerContext强制转换为HttpContext

您可以执行以下

    public override void Log(ExceptionLoggerContext context)
    {
        HttpContext httpContext = GetHttpContext(context.Request);
        ExceptionService.LogException(context.Exception);
    }
    private static HttpContext GetHttpContext(HttpRequestMessage request)
    {
        HttpContextBase contextBase = GetHttpContextBase(request);
        if (contextBase == null)
        {
            return null;
        }
        return contextBase.ApplicationInstance.Context;
    }
    private static HttpContextBase GetHttpContextBase(HttpRequestMessage request)
    {
        if (request == null)
        {
            return null;
        }
        object value;
        if (!request.Properties.TryGetValue("MS_HttpContext", out value))
        {
            return null;
        }
        return value as HttpContextBase;
    }

从这里复制

不可以强制转换,但可以使用的RequestContext属性异常记录器上下文。