示例#1
0
        public override void OnException(HttpActionExecutedContext context)
        {
            HttpStatusCode status = HttpStatusCode.InternalServerError;
            var            exType = context.Exception.GetType();

            if (exType == typeof(UnauthorizedAccessException))
            {
                status = HttpStatusCode.Unauthorized;
            }
            else if (exType == typeof(ArgumentException))
            {
                status = HttpStatusCode.NotFound;
            }
            var apiError = new ApiErrorMessage()
            {
                RequestUri = context.Request.RequestUri.ToString(),
                Method     = context.Request.Method.ToString(),
                PostData   = JsonConvert.SerializeObject(context.ActionContext.ActionArguments.Values),
                Exception  = context.Exception.Message
            };
            // create a new response and attach our ApiError object
            // which now gets returned on ANY exception result
            var errorResponse = context.Request.CreateResponse(status, apiError);

            context.Response = errorResponse;
            base.OnException(context);
        }
        public ValidationResult ValidateAddressesLPIKey(string lpikey)
        {
            List <ApiErrorMessage> myErrors = new List <ApiErrorMessage>();

            bool hasError = false;

            lpikey = lpikey.Replace(" ", "");

            if (lpikey.Length < 10)
            {
                var error = new ApiErrorMessage
                {
                    developerMessage = "LPIKey is invalid, length should be > 10.",
                    userMessage      = "LPIKey is invalid, length should be > 10."
                };

                myErrors.Add(error);
            }

            ValidationResult validationObject = new ValidationResult();

            validationObject.ErrorOccurred = hasError;
            validationObject.ErrorMessages = myErrors;

            return(validationObject);
        }
 public ApiErrorMessage ValidateStreetName(string streetName)
 {
     if (streetName.Length > 100 || streetName.Length < 3)
     {
         var error = new ApiErrorMessage
         {
             developerMessage = "Street Name is invalid, length should be < 100 Char and > 3 Char.",
             userMessage      = "Street Name is invalid, length should be < 100 Char and > 3 Char."
         };
         return(error);
     }
     return(null);
 }
        private ObjectContent <ApiErrorMessage> CreateApiResponse(HttpActionExecutedContext context)
        {
            var apiErrorMessage = new ApiErrorMessage
            {
                ErrorMessage = context.Exception.Message,
                ErrorType    = context.Exception.GetType().ToString()
            };

            if (context.Exception is AggregateException)
            {
                apiErrorMessage = new ApiErrorMessage
                {
                    ErrorMessage = context.Exception.InnerException.Message,
                    ErrorType    = string.Format("{0}, {1}", context.Exception.GetType(), context.Exception.InnerException.GetType())
                };
            }

            return(new ObjectContent <ApiErrorMessage>(apiErrorMessage, new JsonMediaTypeFormatter()));
        }
        public async Task <JsonResult> Post(string workOrderReference, [FromBody] ScheduleAppointmentRequest request)
        {
            try
            {
                var validationResult = _scheduleBookingRequestValidator.Validate(workOrderReference, request);
                if (validationResult.Valid)
                {
                    var appointmentsActions = new AppointmentActions(_loggerAdapter, _appointmentsService,
                                                                     _serviceRequestBuilder, _repairsService, _repairsServiceRequestBuilder);
                    var result = await appointmentsActions.BookAppointment(workOrderReference,
                                                                           DateTime.Parse(request.BeginDate),
                                                                           DateTime.Parse(request.EndDate));

                    var json = Json(result);
                    json.StatusCode  = 200;
                    json.ContentType = "application/json";
                    return(json);
                }
                else
                {
                    var errors = validationResult.ErrorMessages.Select(error => new ApiErrorMessage
                    {
                        developerMessage = error,
                        userMessage      = error
                    }).ToList();
                    var jsonResponse = Json(errors);
                    jsonResponse.StatusCode = 400;
                    return(jsonResponse);
                }
            }
            catch (Exception e)
            {
                var errorMessage = new ApiErrorMessage
                {
                    developerMessage = e.Message,
                    userMessage      = "We had some problems processing your request"
                };
                var jsonResponse = Json(errorMessage);
                jsonResponse.StatusCode = 500;
                return(jsonResponse);
            }
        }
示例#6
0
        public void Test_ApiErrorResult_Instance(string key, string message)
        {
            // Arrange
            var serviceProviderMock = new Mock <IServiceProvider>();

            serviceProviderMock.Setup(serviceProvider =>
                                      serviceProvider.GetService(typeof(ILogger <ValidateModelAttribute>)))
            .Returns(Mock.Of <ILogger <ValidateModelAttribute> >());
            var httpContext = new DefaultHttpContext {
                RequestServices = serviceProviderMock.Object
            };

            // Act
            var err      = new ApiErrorResult(new Exception(message), key);
            var servErr  = new InternalServerErrorResult(new Exception(message));
            var res      = httpContext.Response;
            var req      = httpContext.Request;
            var apiError = new ApiErrorMessage("", "");

            apiError = new ApiErrorMessage(null, "");
            apiError = new ApiErrorMessage("test", "");

            // Assert
            err.Message.Should().Be(key);
            err.Errors.Count.Should().Be(1);
            err.Errors[0].Message.Should().Be(message);

            servErr.StatusCode.Should().Be(500);
            Assert.IsType <ApiErrorResult>(servErr.Value);

            res.Headers.Add(key, message);
            res.StatusCode = 200;
            res.Body       = new MemoryStream(Encoding.ASCII.GetBytes(message));
            res.ToFormattedString().Length.Should().BeGreaterThan(0);

            req.Headers.Add(key, message);
            req.Body = new MemoryStream(Encoding.ASCII.GetBytes(message));
            req.ToFormattedString().Length.Should().BeGreaterThan(0);
        }
示例#7
0
        private void ConfigJwtAuthentication(IServiceCollection services)
        {
            var symmetricKey = Convert.FromBase64String(EncryptionUtil.ToBase64Encode("123456abcdefqwer"));

            services.AddAuthentication(x =>
            {
                x.DefaultScheme             = JwtBearerDefaults.AuthenticationScheme;
                x.DefaultAuthenticateScheme = JwtBearerDefaults.AuthenticationScheme;
                x.DefaultChallengeScheme    = JwtBearerDefaults.AuthenticationScheme;
            })
            .AddJwtBearer(x =>
            {
                x.RequireHttpsMetadata      = false;
                x.TokenValidationParameters = new TokenValidationParameters
                {
                    ValidateIssuerSigningKey = true,
                    IssuerSigningKey         = new SymmetricSecurityKey(symmetricKey),
                    ValidateIssuer           = false,
                    ValidateAudience         = false,
                    ValidateLifetime         = true,
                    ClockSkew = TimeSpan.Zero
                };

                x.Events = new JwtBearerEvents()
                {
                    OnAuthenticationFailed = async context =>
                    {
                        Console.WriteLine("ABCDDDDDDDDDDDDDDDDDDD");
                        var apiErrorMessage = new ApiErrorMessage();
                        var statusCode      = HttpStatusCode.Unauthorized;

                        if (context.Exception is SecurityTokenExpiredException)
                        {
                            apiErrorMessage.ErrorCode    = (int)ErrorCodeEnum.ACCESS_TOKEN_IS_EXPIRED;
                            apiErrorMessage.ErrorMessage = ErrorMessageConstant.ACCESS_TOKEN_IS_EXPIRED;
                        }
                        else
                        {
                            apiErrorMessage.ErrorCode    = (int)ErrorCodeEnum.ACCESS_TOKEN_IS_INVALID;
                            apiErrorMessage.ErrorMessage = ErrorMessageConstant.ACCESS_TOKEN_IS_INVALID;
                            statusCode = (HttpStatusCode.Forbidden);
                        }

                        var apiResponseException = new ApiResponseException()
                        {
                            ErrorMessages = new List <ApiErrorMessage>
                            {
                                apiErrorMessage
                            },
                            StatusCode = statusCode
                        };

                        var apiResponse = new ApiSingleResponse <string>()
                        {
                            Data   = null,
                            Errors = apiResponseException.ErrorMessages
                        };

                        context.Response.StatusCode  = (int)statusCode;
                        context.Response.ContentType = "application/json";
                        await context.Response.WriteAsync(JsonSerializer.Serialize(apiResponse, new JsonSerializerOptions {
                            PropertyNamingPolicy = JsonNamingPolicy.CamelCase
                        }));
                    }
                };
            });
        }