Skip to content

Instantly share code, notes, and snippets.

@benhysell
Created July 23, 2018 13:08
Show Gist options
  • Save benhysell/89f69144d6fae68411311715beeb49f4 to your computer and use it in GitHub Desktop.
Save benhysell/89f69144d6fae68411311715beeb49f4 to your computer and use it in GitHub Desktop.
asp.net core http response checking from a controller
using System.Collections.Generic;
using AutoMapper;
using Microsoft.AspNetCore.Mvc;
namespace Web.Utilities
{
/// <summary>
/// Check the response of a http requests
/// </summary>
public class HttpResponseChecking
{
/// <summary>
/// Checks the response of a http call returning a single object
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="response"></param>
/// <returns></returns>
public static (int? statusCode, T returnObject) CheckResponse<T>(IActionResult response)
{
var statusCode = 0;
var returnedEntity = default(T);
switch (response)
{
case StatusCodeResult responseType:
statusCode = responseType.StatusCode;
break;
case OkObjectResult okResponse:
returnedEntity = (T)okResponse.Value;
statusCode = (int)okResponse.StatusCode;
break;
case CreatedAtActionResult createdAtResponse:
returnedEntity = (T)createdAtResponse.Value;
statusCode = (int)createdAtResponse.StatusCode;
break;
case BadRequestObjectResult badResponse:
returnedEntity = default(T);
statusCode = (int)badResponse.StatusCode;
break;
case AcceptedAtActionResult acceptedResponse:
returnedEntity = (T)acceptedResponse.Value;
statusCode = (int)acceptedResponse.StatusCode;
break;
case NotFoundObjectResult notFoundResponse:
returnedEntity = default(T);
statusCode = (int)notFoundResponse.StatusCode;
break;
case ForbidResult forbidResult:
returnedEntity = default(T);
statusCode = 403;
break;
}
return (statusCode, returnedEntity);
}
/// <summary>
/// Convert a response from one type to another
/// </summary>
/// <typeparam name="TFrom"></typeparam>
/// <typeparam name="TTo"></typeparam>
/// <param name="response"></param>
/// <param name="mapper"></param>
/// <returns></returns>
public static IActionResult ConvertResponse<TFrom, TTo>(IActionResult response, IMapper mapper)
{
var returnedEntity = response;
switch (response)
{
case OkObjectResult okResponse:
okResponse.Value = mapper.Map<TTo>((TFrom)okResponse.Value);
break;
case CreatedAtActionResult createdAtResponse:
createdAtResponse.Value = mapper.Map<TTo>((TFrom)createdAtResponse.Value);
break;
//case BadRequestObjectResult badResponse:
// returnedEntity = badResponse;
// break;
case AcceptedAtActionResult acceptedResponse:
acceptedResponse.Value = mapper.Map<TTo>((TFrom)acceptedResponse.Value);
break;
//case NotFoundObjectResult notFoundResponse:
// returnedEntity = notFoundResponse;
// break;
//case ForbidResult forbidResult:
// returnedEntity = forbidResult;
// statusCode = 403;
// break;
default:
returnedEntity = response;
break;
}
return returnedEntity;
}
/// <summary>
/// Checks the response of http request with expected return of a list
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="response"></param>
/// <returns></returns>
public static (int? statusCode, List<T> returnObject) CheckResponseList<T>(IActionResult response)
{
var statusCode = 0;
List<T> returnedEntity = null;
switch (response)
{
case StatusCodeResult responseType:
statusCode = responseType.StatusCode;
break;
case OkObjectResult okResponse:
returnedEntity = (List<T>)okResponse.Value;
statusCode = (int)okResponse.StatusCode;
break;
case CreatedAtActionResult createdAtResponse:
returnedEntity = (List<T>)createdAtResponse.Value;
statusCode = (int)createdAtResponse.StatusCode;
break;
case BadRequestObjectResult badResponse:
returnedEntity = null;
statusCode = (int)badResponse.StatusCode;
break;
case AcceptedAtActionResult acceptedResponse:
returnedEntity = (List<T>)acceptedResponse.Value;
statusCode = (int)acceptedResponse.StatusCode;
break;
case NotFoundObjectResult notFoundResponse:
returnedEntity = null;
statusCode = (int)notFoundResponse.StatusCode;
break;
case ForbidResult forbidResult:
returnedEntity = null;
statusCode = 403;
break;
}
return (statusCode, returnedEntity);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment