我正在尝试通过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
我忽略了什么吗?非常感谢
答案 0 :(得分:0)
这可能是默认模型联编程序的限制。 您能否尝试从Put方法中删除“字符串ID”并重新发送请求?