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); }
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); }
/// <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); }
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); } }
/// <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) { }