Как обернуть все ответы HTTP в объект JSONC#

Место общения программистов C#
Ответить
Anonymous
 Как обернуть все ответы HTTP в объект JSON

Сообщение Anonymous »

Я хочу обернуть все свои HTTP -ответы в объекты JSON. Например, у нас есть действие, которое возвращает некоторые данные JSON: < /p>

Код: Выделить всё

public IActionResult Get()
{
var res = new
{
MessageBody = "Test",
SomeData = 1
};

return Ok(res);
}
< /code>
Я хочу, чтобы мой ответ выглядел как: < /p>
{
"StatusCode":200,
"Result":
{
"MessageBody ":"Test",
"SomeData":1
}
}
Если есть ошибка, то ответ должен содержать поле Errormessage в ответе.
В MVC 5 я использовал DelegationHandler , но в ядре ASP.NET этот класс не реализован. Теперь мы должны использовать промежуточное программное обеспечение. < /P>
Это код для MVC 5: < /p>

Код: Выделить всё

public class WrappingHandler : DelegatingHandler
{
protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
var response = await base.SendAsync(request, cancellationToken);

return BuildApiResponse(request, response);
}

private static HttpResponseMessage BuildApiResponse(HttpRequestMessage request, HttpResponseMessage response)
{
object content;
string errorMessage = null;

if (response.TryGetContentValue(out content) && !response.IsSuccessStatusCode)
{
HttpError error = content as HttpError;

if (error != null)
{
content = null;
errorMessage = error.Message;

#if DEBUG
errorMessage = string.Concat(errorMessage, error.ExceptionMessage, error.StackTrace);
#endif
}
}

var newResponse = request.CreateResponse(response.StatusCode, new ApiResponse(response.StatusCode, content, errorMessage));

foreach (var header in response.Headers)
{
newResponse.Headers.Add(header.Key, header.Value);
}

return newResponse;
}
}
< /code>
и промежуточное программное обеспечение для ядра ASP.NET. Нет trygetContentValue 
, httperror или другие объекты в ядре ASP.NET. Итак, сначала я пытаюсь прочитать тело ответа: < /p>

Код: Выделить всё

 public class FormatApiResponseMiddleware
{
private readonly RequestDelegate _next;

public FormatApiResponseMiddleware(RequestDelegate next)
{
_next = next;
}

private bool IsSuccessStatusCode(int statusCode)
{
return (statusCode >= 200) && (statusCode 

Подробнее здесь: [url]https://stackoverflow.com/questions/40058017/how-to-wrap-all-http-responses-in-a-json-object[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»