proudmonkey / AutoWrapper

A simple, yet customizable global exception handler and Http response wrapper for ASP.NET Core APIs.
MIT License
679 stars 82 forks source link

Malformed response w/ ProblemDetails (AutoWrapper 4.5) #136

Open nwoolls opened 2 years ago

nwoolls commented 2 years ago

I am attempting to work around the issues reported in #135 and #133 by using AutoWrapper 4.5 w/ the ProblemDetails response. However, I am running into issues with that configuration. Specifically, when the .NET stack / middleware returns ProblemDetails rather than my own controller code, the response is malformed.

You can reproduce this with the following steps.

From the command line:

dotnet --version
6.0.101
mkdir autowrapper-problemdetails-issue
cd autowrapper-problemdetails-issue/
dotnet new webapi
dotnet add package AutoWrapper.Core --version 4.5.0

Edit Program.cs and add:

var options = new AutoWrapperOptions
{
    IsDebug = app.Environment.IsDevelopment(),
    UseApiProblemDetailsException = true
};
app.UseApiResponseAndExceptionWrapper(options);

Edit WeatherForecastController.cs and add:

public class InputModel
{
    [Required(AllowEmptyStrings = false)]
    public string? FirstName { get; set; }
}

[HttpPost]
public IActionResult Post(InputModel inputModel)
{
    return StatusCode(StatusCodes.Status201Created);
}

Example 1 - response is malformed

curl -X 'POST' \
  'https://localhost:7265/WeatherForecast' \
  -H 'accept: */*' \
  -H 'Content-Type: application/json' \
  -d '{}'
{
  "type": [],
  "title": [],
  "status": [],
  "traceId": [],
  "errors": [
    [
      [
        []
      ]
    ]
  ]
}

Example 2 - response is malformed

curl -X 'POST' \
  'https://localhost:7265/WeatherForecast' \
  -H 'accept: */*' \
  -d '{
  "firstName": "string"
}'
{
  "type": [],
  "title": [],
  "status": [],
  "traceId": []
}

Thanks in advance for your guidance!