Created
July 23, 2018 13:08
-
-
Save benhysell/89f69144d6fae68411311715beeb49f4 to your computer and use it in GitHub Desktop.
asp.net core http response checking from a controller
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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