gpt4 book ai didi

c# - Web Api FromBody 来自网络客户端为空

转载 作者:太空狗 更新时间:2023-10-29 17:33:11 28 4
gpt4 key购买 nike

您好,我想通过我在 Web API Controller 中的 body 变量从 C# 客户端调用 Web Api 方法一直为空。如何正确设置? 客户端:

IFileService imgService = new ImageServiceBll();
var image = System.Drawing.Image.FromFile(serverFile);
var dataImage = imgService.ImageToBase64(image, System.Drawing.Imaging.ImageFormat.Png);

using (var client = new HttpClient())
{
client.BaseAddress = new Uri("http://site.local/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

// HTTP POST
var data = new
{
imageData = dataImage,
version = version
};

HttpResponseMessage response = await client.PostAsJsonAsync("api/contenttool/SaveImage", data);
if (response.IsSuccessStatusCode)
{
Uri gizmoUrl = response.Headers.Location;
}
}

服务器端:

public class ContentToolController : ApiController
{
public IFileService FileService { get; set; }
// POST api/contenttool
public string SaveImage([FromBody]string data)
{
JObject jObject = JObject.Parse(data);
JObject version = (JObject)jObject["version"];

return "-OK-" + version;
}
}

最佳答案

我认为这更多地与您在技术上没有传递字符串这一事实有关。您正在传递匿名类型的 JSON 序列化字符串表示形式,因此 Web Api 中的反序列化过程对您不利。当您的请求到达 Controller 和该方法时,它不再是字符串。尝试将 SavImage 方法上的类型更改为动态类型。像这样:

public string SavImage([FromBody]dynamic data)
{
JObject jObject = JObject.Parse(data);
JObject version = (JObject)jObject["version"];

return "-OK-" + version;
}

不幸的是,那时您将无法使用智能感知来获取您的属性。您将必须通过字典从动态类型中获取数据。

Dictionary<string, object> obj = JsonConvert.DeserializeObject<Dictionary<string, object>>(Convert.ToString(data));

当然,您的另一个选择是使用在客户端和服务器之间共享的实际类型。这会让这件事变得更容易一些。

关于c# - Web Api FromBody 来自网络客户端为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23135403/

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