BSON в .NET Core 2.0 Web API - PullRequest
       75

BSON в .NET Core 2.0 Web API

0 голосов
/ 11 октября 2018

У меня есть проект .NET Core WebApi, и я хотел бы отправить запрос и получить ответ в BSON.

Я установил WebApiContrib.Core.Formatter.Bson и добавил

services.AddMvc().AddBsonSerializerFormatters(); 

в Startup.cs в ConfigurationServices.

Мне нужно сделать что-нибудь еще?

У меня есть метод тестирования в контроллере:

[HttpGet]
public string GetTestBson()
{
    return "test string bson";
}

Я пытаюсь проверить его с помощью почтальона, в заголовках у меня есть Content-Type: application/bson, но в ответ у меня нет BSON ...У меня "test string bson"

Что я делаю не так?

1 Ответ

0 голосов
/ 11 октября 2018

При отправке запроса вам необходимо установить заголовок запроса Accept, который установлен на application/bson:

Accept: application/bson

Используя Content-Type: application/bson, вы 'Мы фактически говорим, что тело запроса, которое вы отправляете, это BSON, но так как это запрос GET, вы вообще не отправляете тело.Использование Accept: application/bson говорит о том, что вы хотите вернуть BSON в ответе.

Этот ответ в WebMasters StackExchange объясняет разницу между Accept и Content-Type более подробно.

Кроме того, что здесь требуется заголовок Accept, вам также потребуется вернуть объект или массив из вашего действия, в противном случае сериализатор BSON завершится с таким сообщением, как:

Ошибка записи строкового значения.BSON должен начинаться с объекта или массива.Путь ''.

Чтобы вернуть объект, вы можете сделать что-то вроде этого:

[HttpGet]
public IActionResult GetTestBson()
{
    return Ok(new { Value = "test string bson" });
}

Это возвращает новый анонимный тип со свойством Value -вы не можете просто вернуть существующий string как object, так как объект BSON должен иметь свойства.

...