gpt4 book ai didi

c# - 在 WebApi Controller 中读取 HttpContent

转载 作者:IT王子 更新时间:2023-10-29 03:43:24 27 4
gpt4 key购买 nike

如何在 MVC webApi Controller 操作中读取 PUT 请求的内容。

[HttpPut]
public HttpResponseMessage Put(int accountId, Contact contact)
{
var httpContent = Request.Content;
var asyncContent = httpContent.ReadAsStringAsync().Result;
...

我在这里得到空字符串:(

我需要做的是:找出初始请求中修改/发送的“哪些属性”(意思是如果 Contact 对象有 10 个属性,而我只想更新其中的 2 个他们,我只发送和反对两个属性,像这样:

{

"FirstName": null,
"LastName": null,
"id": 21
}

预期的最终结果是

List<string> modified_properties = {"FirstName", "LastName"}

最佳答案

通过设计,ASP.NET Web API 中的正文内容被视为只能读取一次的只进流。

在您的案例中,第一次读取是在 Web API 绑定(bind)您的模型时完成的,之后 Request.Content 将不会返回任何内容。

您可以从操作参数中删除 contact,获取内容并将其手动反序列化为对象(例如使用 Json.NET):

[HttpPut]
public HttpResponseMessage Put(int accountId)
{
HttpContent requestContent = Request.Content;
string jsonContent = requestContent.ReadAsStringAsync().Result;
CONTACT contact = JsonConvert.DeserializeObject<CONTACT>(jsonContent);
...
}

这应该可以解决问题(假设 accountId 是 URL 参数,因此它不会被视为读取的内容)。

关于c# - 在 WebApi Controller 中读取 HttpContent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12494067/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com