Это потому, что вы располагаете newBody
, поэтому, когда ответ не является ответом об ошибке, тогда все тело ответа удаляется и теряется. Вы можете создать else
заявление и скопировать ответ в оригинал body
:
if (context.Response.StatusCode != 200 && context.Response.StatusCode != 206)
{
...
}
else
{
context.Response.Body = body;
newBody.Seek(0, SeekOrigin.Begin);
await newBody.CopyTo(context.response.Body);
}
Или мое личное предпочтение - создать собственный ErrorResult, который реализует IActionResult или наследует ObjectResult, где Вы можете форматировать сообщение, используя ваш объект вместо строки:
public class ErrorResult : ObjectResult
{
public ErrorResult(MyError error)
: base(error)
{
StatusCode = 400;
}
public override Task ExecuteResultAsync(ActionContext context)
{
var messageParser = context.HttpContext.RequestServices.GetService(typeof(IMessageParser));
ContentTypes.Add(messageParser.GetFormat());
<other modifications>
return base.ExecuteResultAsync(context);
}
и затем вернуть его в контроллеры
...
return new ErrorResult(new MyError(...));
...