通过Web请求进行PutAsync时缺少BsonDocument的值?

时间:2018-08-15 08:40:45

标签: c# mongodb asp.net-web-api controller bson

我正在尝试通过PutAsync请求将简单的BsonDocument发送到WebAPI。

但是,将BsonDocument的值传递到WebAPI控制器时丢失

这是我客户的密码。

public static async Task<HttpResponseMessage> sendBdoc()
{
    try
    {
       var abc = new BsonDocument("Abc","hoho");

       var bformatter = new BsonMediaTypeFormatter();

       var id = ObjectId.GenerateNewId();

       HttpClient client = new HttpClient()
       client.BaseAddress = new Uri("http://localhost:58836");

       client.DefaultRequestHeaders.Accept.Clear();
       client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/bson"));

       var response = await client.PutAsync($"api/query/{id}", abc, bformatter);

       return response;
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
        throw;
    }
}

这是我的控制器的代码:

public async Task<IHttpActionResult> Put(string id, BsonDocument doc)
{
     try
     {
            //MongoDB Connection stuff here

            var filter = new BsonDocument("_id", ObjectId.Parse(id));

            var update = collection.ReplaceOneAsync(filter, doc, new UpdateOptions() { IsUpsert = true });
            var result = await update;

            if (result.IsAcknowledged)
            {
                return Ok();
            }

            return NotFound();
     }
     catch (Exception e)
     {
         return InternalServerError();
     }
}

调试客户端应用的屏幕截图,变量abc中填充了值。

https://i.stack.imgur.com/txp8l.png

网络控制器端的调试屏幕截图,BsonDocument的值现在变为空。

https://i.stack.imgur.com/lBTe3.png

我忽略了什么吗?非常感谢

1 个答案:

答案 0 :(得分:0)

这可能是默认模型联编程序的限制。 您能否尝试从Put方法中删除“字符串ID”并重新发送请求?