public async Task InvokeAsync(HttpContext context, IStatusResponse statusResponse) { //Set IStatusResponse on response headers at end of request session context.Response.OnStarting(state => { string statusRespStr = JsonSerializer.Serialize(statusResponse); context.Response.Headers.Add(SRR.HeaderKey, statusRespStr); return(Task.CompletedTask); }, context); try { await _next(context); } catch (Exception ex) { //Typically would log whatever exception was thrown to a permanent place //Low-key just didn't want to impl a Logger NuGet .csproj that worked with a Logger.json file List <StatusDetail> details = new List <StatusDetail>() { new StatusDetail() { Code = Status.Status900.UnknownCode.ToInt32(), Desc = Status.StatusMessage.UnknownCode.GetValue() }, new StatusDetail() { Code = Status.Status900.UnknownCode.ToInt32(), Desc = ex.Message } }; statusResponse.SetStatusResponse(Status.Status500.FatalError, Status.StatusMessage.FatalError, details); context.Response.StatusCode = (int)HttpStatusCode.NoContent; context.Response.ContentLength = 0; context.Response.Body = Stream.Null; } }
public async Task InvokeAsync(HttpContext context, IStatusResponse statusResp) { List <StatusDetail> statusDetails; //Get Token from header if (!context.Request.Headers.TryGetValue(TokenMan.RequestHeaderKey, out StringValues headerVal)) { FailForMissingToken(); return; } string token = headerVal.FirstOrDefault(); if (string.IsNullOrWhiteSpace(token)) { FailForMissingToken(); return; } //---Validations--- //Signature validation bool isValid = TokenMan.ValidateTokenSignature(token); if (!isValid) { statusDetails = new List <StatusDetail>() { new StatusDetail() { Code = Status300.TandemTokenNotValid.ToInt32(), Desc = StatusMessage.TandemTokenNotValid.GetValue() } }; statusResp.SetStatusResponse(Status500.BadRequest, StatusMessage.BadRequest, statusDetails); return; } //Expired validation isValid = !TokenMan.TokenIsExpired(token); if (!isValid) { statusDetails = new List <StatusDetail>() { new StatusDetail() { Code = Status300.TandemTokenNotValid.ToInt32(), Desc = StatusMessage.TandemTokenNotValid.GetValue() } }; statusResp.SetStatusResponse(Status500.BadRequest, StatusMessage.BadRequest, statusDetails); return; } //Token valid, proceed await _next(context); //LOCAL HELPER FUNCTION void FailForMissingToken() { statusDetails = new List <StatusDetail>() { new StatusDetail() { Code = Status300.TandemTokenNotFound.ToInt32(), Desc = StatusMessage.TandemTokenNotFound.GetValue() } }; statusResp.SetStatusResponse(Status500.BadRequest, StatusMessage.BadRequest, statusDetails); } }