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); }
/// <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; } } }
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); }
public override string ToString() => JsonSerializer.Serialize(this, SystemTextJson.GetAdncDefaultOptions());