尝试使用 WebClient 将空正文传递给 POST 端点
Posted
技术标签:
【中文标题】尝试使用 WebClient 将空正文传递给 POST 端点【英文标题】:Attempting to pass empty body to POST endpoint with WebClient 【发布时间】:2021-12-19 13:07:52 【问题描述】:我目前在我的项目中有一个端点:
[HttpPost("process")]
public IActionResult Process (string Val1, [FromBody] object Json)
//processing.....
Return Ok(...);
在我的客户端,我尝试使用 WebClient 调用此端点,如下所示:
string response = null;
string body = "";
using (var client = new WebClient())
client.UserDefaultCredentials = true;
client.Headers.Add(HttpRequestHeader.ContentType, "application/json; charset=utf-8");
response = client.UploadString("localhost:55555/api/process?Val1=Param", body);
这是我担心的地方:
对于这个端点,我通常会传递一个 JSON 对象
但是,我希望这个端点也不需要正文,我希望它为空,因为端点不应该需要它
如果您查看我的 body
变量 - 我将其设置为“”,否则我没有找到将“EMPTY”正文传递给端点的不同方法
问题:
如何正确地将 EMPTY 正文传递到此端点? (这个端点将被不同的客户使用,我只是在寻找最佳实践方法?
在我的端点中,我有 [FromBody] object Json
参数。将其设置为 object
是更好的做法吗,或者我可以选择使用仍然可以接受空主体的 JObject
如果这些问题看起来很明显,请原谅我的“菜鸟”,我刚刚开始 API 开发,并希望确保我使用的是最佳实践。
【问题讨论】:
【参考方案1】:您当前正在使用 WebClient,它已过时支持 HttpClient(请参阅此answer)。使用 HttpClient 时,您可以按如下方式发布空正文:await client.PostAsync("localhost:55555/api/process?Val1=Param", null);
关于你的第二个问题。查看Data Transfer Objects,又名 DTO。简而言之,它们是愚蠢的类型,您可以纯粹用于通过 API 传递和接收数据,您也可以向它们添加验证等内容。只有在接收动态数据时才需要使用 object 或 JObject,否则请尽可能使用 DTO。
【讨论】:
以上是关于尝试使用 WebClient 将空正文传递给 POST 端点的主要内容,如果未能解决你的问题,请参考以下文章
将空值作为参数传递给方法时如何修复 NullPointerException [重复]
如何将空参数传递给 msdeploy powershell deploy 命令