HTTP response status codes have so much importance in REST API’s. In any case if you want to return a status code from your ASP.NET Core API, all you have to do is in your controller method,
1return StatusCode(StatusCodes.Status500InternalServerError);
StatusCode is from Microsoft.AspNetCore.Mvc.ControllerBase.StatusCode and StatusCodes from Microsoft.AspNetCore.Http.StatusCodes. The above code will return a 500 status code. Similar way, you can return any other status code. For the complete list,
👉 StatusCodes Class (Microsoft.AspNetCore.Http) | Microsoft Docs
HTTP status code 5xx indicates server error. 5xx series includes,
Status Code | Description | ASP.NET Core 2.2 |
500 | Internal Server Error | Status500InternalServerError |
501 | Not Implemented | Status501NotImplemented |
502 | Bad Gateway | Status502BadGateway |
503 | Service Unavailable | Status503ServiceUnavailable |
504 | Gateway Timeout | Status504GatewayTimeout |
505 | HTTP Version Not Supported | Status505HttpVersionNotsupported |
506 | Variant Also Negotiates | Status506VariantAlsoNegotiates |
507 | Insufficient Storage | Status507InsufficientStorage |
508 | Loop Detected | Status508LoopDetected |
510 | Not Extended | Status510NotExtended |
511 | Network Authentication Required | Status511NetworkAuthenticationRequired |
599 | Network Connect Timeout Error |
You can also return some additional data along with the status code. Here is an example,
1[Route("{code}")]2[HttpGet]3[ProducesResponseType(typeof(Merchant), 200)]4public async Task<ActionResult> GetMerchant(string code)5{6 var input = new EntityRequestDto<string>7 {8 Id = code9 };1011 var result = await _merchantService.GetMerchant(input);1213 if (result.IsSuccess)14 {15 return Ok(result.Value);16 }1718 _logger.LogError("FAILED: GetMerchant - ${result.Error}");19 return StatusCode(StatusCodes.Status500InternalServerError, result.Error);2021}
If another service which is a client of the above API, they can get the additional info by,
1public async Task<MerchantPreviewDto> GetMerchant(string merchantCode)2{3 try4 {5 var merchant = await $"{_apiBaseUri}/api/v1/merchants/{merchantCode}"6 .WithOAuthBearerToken(...)7 .GetJsonAsync<Merchant>().ConfigureAwait(false);89 return ObjectMapper.Map<MerchantPreviewDto>(merchant);10 }11 catch (FlurlHttpException ex)12 {13 var error = await ex.GetResponseStringAsync();14 throw new UserFriendlyException("Oops! There is a problem!", error);15 }16}
Bonus
On the client service, I am using Flurl, which is my favorite HTTP client.
Flurl is a modern, fluent, asynchronous, testable, portable, buzzword-laden URL builder and HTTP client library for .NET.
Which one is your favorite HTTP client library for .NET?