コード例 #1
0
    private async Task HandleExceptionAsync(HttpContext context, Exception exception)
    {
        var requestId = System.Diagnostics.Activity.Current?.Id ?? context.TraceIdentifier;
        var eventId   = new EventId(exception.HResult, requestId);

        _logger.LogError(eventId, exception, exception.Message);

        var status = 500;
        var type   = string.Concat("https://httpstatuses.com/", status);
        var title  = _env.IsDevelopment() ? exception.Message : $"系统异常";
        var detial = _env.IsDevelopment() ? exception.GetExceptionDetail() : $"系统异常,请联系管理员({eventId})";

        var problemDetails = new ProblemDetails
        {
            Title = title
            ,
            Detail = detial
            ,
            Type = type
            ,
            Status = status
        };

        context.Response.StatusCode  = status;
        context.Response.ContentType = "application/problem+json";
        var errorText = JsonSerializer.Serialize(problemDetails, SystemTextJson.GetAdncDefaultOptions());
        await context.Response.WriteAsync(errorText);
    }
コード例 #2
0
    /// <summary>
    /// 注册Rest服务(跨微服务之间的同步通讯)
    /// </summary>
    /// <typeparam name="TRestClient">Rpc服务接口</typeparam>
    /// <param name="serviceName">在注册中心注册的服务名称,或者服务的Url</param>
    /// <param name="policies">Polly策略</param>
    protected virtual void AddRestClient <TRestClient>(string serviceName, List <IAsyncPolicy <HttpResponseMessage> > policies)
        where TRestClient : class
    {
        var addressNode = RpcAddressInfo.FirstOrDefault(x => x.Service.EqualsIgnoreCase(serviceName));

        if (addressNode is null)
        {
            throw new NullReferenceException(nameof(addressNode));
        }

        Services.TryAddScoped <CacheDelegatingHandler>();
        Services.TryAddScoped <TokenDelegatingHandler>();
        Services.TryAddScoped <ConsulDiscoverDelegatingHandler>();
        Services.TryAddScoped <TokenFactory>();

        var registeredType = Configuration.GetRegisteredType().ToLower();
        //注册RefitClient,设置httpclient生命周期时间,默认也是2分钟。
        var contentSerializer = new SystemTextJsonContentSerializer(SystemTextJson.GetAdncDefaultOptions());
        var refitSettings     = new RefitSettings(contentSerializer);
        var clientbuilder     = Services.AddRefitClient <TRestClient>(refitSettings)
                                .SetHandlerLifetime(TimeSpan.FromMinutes(2))
                                .AddPolicyHandlerICollection(policies)
                                //.UseHttpClientMetrics()
                                .AddHttpMessageHandler <CacheDelegatingHandler>()
                                .AddHttpMessageHandler <TokenDelegatingHandler>();

        switch (registeredType)
        {
        case RegisteredTypeConsts.Direct:
        {
            clientbuilder.ConfigureHttpClient(httpClient => httpClient.BaseAddress = new Uri(addressNode.Direct));
            break;
        }

        case RegisteredTypeConsts.ClusterIP:
        {
            clientbuilder.ConfigureHttpClient(httpClient => httpClient.BaseAddress = new Uri(addressNode.CoreDns));
            break;
        }

        case RegisteredTypeConsts.Consul:
        {
            clientbuilder.ConfigureHttpClient(httpClient => httpClient.BaseAddress = new Uri(addressNode.Consul))
            .AddHttpMessageHandler <ConsulDiscoverDelegatingHandler>();
            break;
        }
        }
    }
コード例 #3
0
    private OperationLog CreateOpsLog(string className, string methodName, string logName, object[] arguments, UserContext userContext)
    {
        var log = new OperationLog
        {
            ClassName       = className,
            CreateTime      = DateTime.Now,
            LogName         = logName,
            LogType         = "操作日志",
            Message         = JsonSerializer.Serialize(arguments, SystemTextJson.GetAdncDefaultOptions()),
            Method          = methodName,
            Succeed         = "false",
            UserId          = userContext.Id,
            UserName        = userContext.Name,
            Account         = userContext.Account,
            RemoteIpAddress = userContext.RemoteIpAddress
        };

        return(log);
    }
コード例 #4
0
 public override string ToString() => JsonSerializer.Serialize(this, SystemTextJson.GetAdncDefaultOptions());