/// <summary> /// Writes <see cref="ProblemDetails"/> to response body. /// </summary> public async Task WriteAsync(ProblemResponseWriterContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } var response = context.HttpContext.Response; if (response.HasStarted) { throw new InvalidOperationException("Response has started."); } var problem = context.Problem; response.StatusCode = problem.Status ?? StatusCodes.Status500InternalServerError; response.ContentType = "application/problem+json; charset=utf-8"; context.ApplyTo(response); await response.StartAsync(); var bodyStream = response.Body; await JsonSerializer.SerializeAsync(bodyStream, problem, problem.GetType(), SerializerOptions); await bodyStream.FlushAsync(); }
/// <summary> /// Writes <see cref="ProblemDetails"/> to response body. /// </summary> public Task WriteAsync(ProblemResponseWriterContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } if (context.ActionContext == null) { throw new InvalidOperationException("Action context is required."); } var executor = context.HttpContext.RequestServices .GetRequiredService <IActionResultExecutor <ObjectResult> >(); var result = new ObjectResult(context.Problem) { StatusCode = context.Problem.Status }; return(executor.ExecuteAsync(context.ActionContext, result)); }