示例#1
0
        private async Task WriteHttpResponseAsync(HttpContext context, HttpErrorModel error)
        {
            context.Response.StatusCode  = error.StatusCode;
            context.Response.ContentType = "application/json";

            await context.Response.WriteAsync(JsonConvert.SerializeObject(new { error.Details }), Encoding.UTF8);
        }
示例#2
0
        public HttpErrorModel HttpResponse()
        {
            var httpError = new HttpErrorModel {
                StatusCode = StatusCode, Message = "Internal error", Type = "Internal"
            };

            return(httpError);
        }
 public HttpResponseModel(HttpErrorModel error)
 {
     if (error != null)
     {
         this.Status  = HTTP_RESPONSE_STATUS.ERROR;
         this.Message = error.Error;
         this.Errors  = new List <HttpErrorModel> {
             error
         };
     }
 }
            public async Task ReturnsBadRequestOnArgumentException()
            {
                string currency      = "dolar";
                var    expectedError = new HttpErrorModel()
                {
                    Message = "dummy error message [bad request]",
                };

                _cambioTodayServiceMock
                .Setup(x => x.GetQuotation(It.IsAny <string>()))
                .ThrowsAsync(new ArgumentException(expectedError.Message));
                var result = await quotationController.Get(currency);

                var badRequestResult = Assert.IsType <BadRequestObjectResult>(result);
                var returnedError    = Assert.IsType <HttpErrorModel>(badRequestResult.Value);

                returnedError.Should().BeEquivalentTo(expectedError);
            }
示例#5
0
        /// <summary>
        /// Returns an error page using a view names "Error", passing a nice <see cref="HttpErrorModel"/>.
        /// </summary>
        /// <param name="action">The action we com from (NotFound, Forbidden...).</param>
        /// <param name="model">The model.</param>
        /// <param name="code">The HTTP code.</param>
        /// <returns></returns>
        protected virtual ActionResult Work(string action, HttpErrorModel model, int code)
        {
            Trace.WriteLine("ErrorController." + action + ": begin");

            var ex     = this.RouteData.DataTokens[ResultServiceBase.RouteDataExceptionKey] as Exception;
            var httpex = this.RouteData.DataTokens[ResultServiceBase.RouteDataExceptionKey] as HttpException;

            var msg = model;

            msg.Code = httpex != null?httpex.GetHttpCode() : code;

            msg.UrlPath     = Request.Url.PathAndQuery;
            msg.ErrorAction = action;

            var message = RouteData.DataTokens[ResultServiceBase.RouteDataMessageKey] as string;

            if (message != null)
            {
                msg.Message = message;
            }

            if (this.IncludeExceptionDetails)
            {
                msg.Exception = RouteData.DataTokens.ContainsKey(ResultServiceBase.RouteDataExceptionKey) ? RouteData.DataTokens[ResultServiceBase.RouteDataExceptionKey] as Exception : null;
            }

            this.Response.StatusCode = msg.Code;

            this.Response.Charset = "utf-8";

            this.OnErrorResponseReady(action, model, code);

            Trace.WriteLine("ErrorController." + action + ": end");

            if (this.Request.IsXmlHttpRequest() || this.Request.PrefersJson())
            {
                return(new ResultServiceBase(this.HttpContext).JsonErrorWithException(code, action, model.Message ?? "Unknown error.", ex));
            }
            else
            {
                this.Response.ContentType = "text/html; charset=utf-8";
                return(this.View("Error", msg));
            }
        }
            public async Task ReturnsBadGatewayOnCambioTodayAPIException()
            {
                string currency      = "dolar";
                var    expectedError = new HttpErrorModel()
                {
                    Message = "dummy error message [bad gateway]",
                };

                _cambioTodayServiceMock
                .Setup(x => x.GetQuotation(It.IsAny <string>()))
                .ThrowsAsync(new CambioTodayAPIException(expectedError.Message));
                var result = await quotationController.Get(currency);

                var objectResult = Assert.IsType <ObjectResult>(result);

                Assert.Equal(StatusCodes.Status502BadGateway, objectResult.StatusCode);
                var returnedError = Assert.IsType <HttpErrorModel>(objectResult.Value);

                returnedError.Should().BeEquivalentTo(expectedError);
            }
示例#7
0
 public async Task<IActionResult> Get(string currency)
 {
     try
     {
         var response = await _cambioTodayService.GetQuotation(currency);
         return Ok(response);
     }
     catch (ArgumentException ex)
     {
         var error = new HttpErrorModel()
         {
             Message = ex.Message,
         };
         return BadRequest(error);
     }
     catch (CambioTodayAPIException ex)
     {
         var error = new HttpErrorModel()
         {
             Message = ex.Message,
         };
         return StatusCode(StatusCodes.Status502BadGateway, error);
     }
 }
示例#8
0
 /// <summary>
 /// Called when [error response ready].
 /// </summary>
 /// <param name="action">The action.</param>
 /// <param name="model">The model.</param>
 /// <param name="code">The code.</param>
 protected virtual void OnErrorResponseReady(string action, HttpErrorModel model, int code)
 {
 }