/// <summary>
        ///     Set status code and error in response
        /// </summary>
        /// <param name="context">The context.</param>
        /// <param name="campaignsProductManagerException">The identity server exception.</param>
        /// <returns></returns>
        public static async Task SetErrorResponse(this HttpContext context,
                                                  CampaignsProductManagerException campaignsProductManagerException)
        {
            var msg = string.IsNullOrWhiteSpace(campaignsProductManagerException.Error.ErrorDescription)
                ? ErrorModel.ErrorMessageDefault
                : campaignsProductManagerException.Error.ErrorDescription;
            var error = new ErrorModel((int)campaignsProductManagerException.ResponseCode)
            {
                Message   = msg,
                ErrorCode = campaignsProductManagerException.Error.ErrorCode
            };
            var response = new ApiResponseModel <string>(error)
            {
                CorrelationId = context.TraceIdentifier
            };
            var objectResult = new ObjectResult(response)
            {
                StatusCode = (int)campaignsProductManagerException.ResponseCode
            };

            context.Response.ContentType = Constants.Constants.HttpResponseHeaders.ContentTypeJson;
            context.Response.StatusCode  = (int)campaignsProductManagerException.ResponseCode;
            context.Response.Headers.Add(Constants.Constants.HttpResponseHeaders.HeadersAccessControlAllowOrigin,
                                         Constants.Constants.HttpResponseHeaders.HeadersAccessControlAllowOriginValue);
            await context.Response.WriteAsync(JsonConvert.SerializeObject(objectResult));
        }
示例#2
0
        /// <summary>
        /// Creates exception handler for api requests.
        /// </summary>
        /// <param name="appBuilder">The application builder.</param>
        /// <param name="logger">The logger.</param>
        /// <param name="configuration">The configuration.</param>
        /// <returns></returns>
        public static IApplicationBuilder UseApiExceptionHandler(this IApplicationBuilder appBuilder, ILogger logger, IConfiguration configuration)
        {
            appBuilder.UseExceptionHandler(
                options =>
            {
                options.Run(async context =>
                {
                    var exceptionFeature = context.Features.Get <IExceptionHandlerPathFeature>();
                    if (exceptionFeature != null)
                    {
                        string routeWhereExceptionOccurred = exceptionFeature.Path;
                        Exception exceptionThatOccurred    = exceptionFeature.Error;

                        if (!(exceptionThatOccurred is CampaignsProductManagerException campaignsProductManagerException))
                        {
                            logger.Error(exceptionThatOccurred, exceptionThatOccurred.Message);
                            var error = new Error(configuration, ErrorItem.InternalServerError);
                            campaignsProductManagerException = new CampaignsProductManagerException(HttpStatusCode.InternalServerError, error);
                        }

                        logger.Error(campaignsProductManagerException, routeWhereExceptionOccurred);
                        logger.Error("Headers : " + context.GetRequestHeaders());

                        await context.SetErrorResponse(campaignsProductManagerException);
                    }
                });
            }
                );
            return(appBuilder);
        }