.NET Core 2.0 Web API中的BSON

3

我有一个.NET Core WebApi项目,并希望以BSON格式发送请求并获取响应。

我安装了WebApiContrib.Core.Formatter.Bson并添加了:

services.AddMvc().AddBsonSerializerFormatters(); 

Startup.cs文件的ConfigureServices方法中。

我还需要做其他什么吗?

我在控制器中有测试方法:

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

我尝试使用Postman进行测试,在头信息中我有Content-Type: application/bson,但是在响应中我没有BSON,而是得到了"test string bson"

我哪里做错了?

1个回答

4

在发出请求时,需要设置一个请求头部,即Accept,该头部应设置为application/bson

Accept: application/bson

通过使用Content-Type: application/bson,您实际上是在说您发送的请求正文是BSON格式的,但由于这是一个GET请求,因此您实际上根本没有发送正文。使用Accept: application/bson表示您希望响应中返回BSON格式。
这篇来自StackExchange WebMasters的答案更详细地解释了AcceptContent-Type之间的区别。
除了这里需要Accept头之外,您还需要从操作中返回对象或数组,否则BSON序列化程序将失败并显示以下消息:

写入字符串值时出错。BSON必须以对象或数组开头。路径''。

为了返回一个对象,您可以这样做:
[HttpGet]
public IActionResult GetTestBson()
{
    return Ok(new { Value = "test string bson" });
}

这将返回一个新的匿名类型,其中包含一个名为Value的属性 - 您不能仅将现有的string作为object返回,因为BSON对象必须具有属性。


太好了!现在我在Postman中看到类似于“....test....string....bson....”的东西,我认为没问题?但是我能否获取十六进制值以检查它是否可以反向工作? - Drakoo
你可以尝试使用类似于这个的工具将JSON转换为BSON以进行测试。 - Kirk Larkin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接