尝试使用 WebClient 将空主体传递给 POST 端点
Attempting to pass empty body to POST endpoint with WebClient
我目前在我的项目中有一个端点:
[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 开发,希望确保我使用的是最佳实践。
您当前使用的是 WebClient,它已过时,支持 HttpClient(请参阅此 answer)。使用 HttpClient 时,您可以 post 清空正文,如下所示:await client.PostAsync("localhost:55555/api/process?Val1=Param", null);
关于你的第二个问题。查看 Data Transfer Objects,又名 DTO。它们是简而言之的哑类型,您可以纯粹用于通过 API 传递和接收数据,您也可以向它们添加诸如验证之类的东西。只有在接收动态数据时才需要使用 object 或 JObject,否则请尽可能使用 DTO。
我目前在我的项目中有一个端点:
[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 开发,希望确保我使用的是最佳实践。
您当前使用的是 WebClient,它已过时,支持 HttpClient(请参阅此 answer)。使用 HttpClient 时,您可以 post 清空正文,如下所示:await client.PostAsync("localhost:55555/api/process?Val1=Param", null);
关于你的第二个问题。查看 Data Transfer Objects,又名 DTO。它们是简而言之的哑类型,您可以纯粹用于通过 API 传递和接收数据,您也可以向它们添加诸如验证之类的东西。只有在接收动态数据时才需要使用 object 或 JObject,否则请尽可能使用 DTO。