Почему HttpResponseMessage не показывает свое содержимое? - PullRequest
0 голосов
/ 13 ноября 2018

Здравствуйте, я пытаюсь отправить объект Json, используя HttpResponseMessage. Хотя при отладке данные выглядят так, как будто они были вставлены в раздел Content (104 байт присутствует) при использовании Postman при получении json, в разделе Content нет данных, только заголовок.

JsonResponse

{
    "version": {
        "major": 1,
        "minor": 1,
        "build": -1,
        "revision": -1,
        "majorRevision": -1,
        "minorRevision": -1
    },
    "content": {
        "headers": [
            {
                "key": "Content-Type",
                "value": [
                    "text/plain; charset=utf-8"
                ]
            } ////why no data ??
        ]
    },
    "statusCode": 200,
    "reasonPhrase": "OK",
    "headers": [],
    "requestMessage": null,
    "isSuccessStatusCode": true
}

Как вы можете видеть, контента нет. Я повторно использую тот же код, что и в более раннем приложении, и у меня не возникло этой проблемы. Почему содержимое пустое?

Код

private static List<User> users = new List<User> {
    new User{ Id = 0, Age = 0, Name = "Failed"},
    new User{ Id = 12, Age = 33, Name = "Daniel"},
    new User{ Id = 13, Age = 33, Name = "Marian"},
};


[HttpGet]
[Route("/api/getusers")]
public async Task<HttpResponseMessage> GetUsers() {
    await Task.Delay(1000);
    var str = JsonConvert.SerializeObject(users);
    return new HttpResponseMessage {
        StatusCode = HttpStatusCode.OK,
        Content = new StringContent(str, Encoding.UTF8)
    };
}

1 Ответ

0 голосов
/ 13 ноября 2018

ASP.NET Core не имеет встроенной поддержки для возврата HttpResponseMessage. Если вы хотите вернуть JSON, вы можете использовать IActionResult и позволить ASP.NET Core обработать сериализацию за вас. Вот обновленный пример:

public async Task<IActionResult> GetUsers() {
    await Task.Delay(1000);
    return Json(users);
}

Здесь есть дополнительные параметры, например, для ситуаций, когда вы хотите разрешить согласование содержимого . Вот версия, которая поддерживает согласование содержимого, используя OkObjectResult:

public async Task<IActionResult> GetUsers() {
    await Task.Delay(1000);
    return Ok(users);
}

Вы можете даже просто вернуть users, если предпочитаете:

public async Task<List<User>> GetUsers() {
    await Task.Delay(1000);
    return users;
}

Этого должно быть достаточно, чтобы начать - официальная документация объясняет следующее: Типы возвращаемых действий контроллера в ASP.NET Core Web API .

...