C# PutAsync over web请求时缺少BsonDocument的值?

C# PutAsync over web请求时缺少BsonDocument的值?,c#,mongodb,asp.net-web-api,controller,bson,C#,Mongodb,Asp.net Web Api,Controller,Bson,我正试图通过PutAsync请求向WebAPI发送一个简单的BsonDocument 但是,当传递给WebAPI控制器时,BsonDocument的值将丢失 这是我客户的密码 public static async Task<HttpResponseMessage> sendBdoc() { try { var abc = new BsonDocument("Abc","hoho"); var bformatter = new BsonM

我正试图通过PutAsync请求向WebAPI发送一个简单的BsonDocument

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

这是我客户的密码

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;
    }
}
公共静态异步任务sendBdoc()
{
尝试
{
var abc=新的B信用证(“abc”、“hoho”);
var bformatter=new BsonMediaTypeFormatter();
var id=ObjectId.GenerateNewId();
HttpClient=新的HttpClient()
client.BaseAddress=新Uri(“http://localhost:58836");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(新MediaTypeWithQualityHeaderValue(“应用程序/bson”);
var response=await client.PutAsync($“api/query/{id}”,abc,bformatter);
返回响应;
}
捕获(例外e)
{
控制台写入线(e);
投掷;
}
}
以下是我的控制器的代码:

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();
     }
}
public异步任务Put(字符串id,BsonDocument文档)
{
尝试
{
//这里是MongoDB连接
var filter=newbsondocument(“_id”,ObjectId.Parse(id));
var update=collection.ReplaceOneAsync(过滤器、文档、新更新选项(){IsUpsert=true});
var结果=等待更新;
如果(结果已确认)
{
返回Ok();
}
返回NotFound();
}
捕获(例外e)
{
返回InternalServerError();
}
}
调试my客户端应用程序的屏幕截图,变量abc填充值

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


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

这可能是默认型号活页夹的一个限制。
能否尝试从Put方法中删除“stringid”并重新发送请求

嗨,谢谢你的意见。但是“stringid”是必需的,因为我使用它作为路由属性。很抱歉,我忘了在控制器部分的代码片段中包含。[Route(“{id}”)您能尝试修饰Put方法参数吗?类似于Put([FromRoute]string id,[FromBody]BsonDocument doc)的东西可以向模型绑定器提示从何处解析数据。