如何在接收 Web api 方法时传递 JSON 字符串使用 HttpClient 接受强类型参数?
How to pass JSON string when receiving Web api method is accepting strongly typed parameter using HttpClient?
我正在尝试弄清楚如何以字符串格式 POST JSON 到 Web api 2 方法,该方法在 c# 消费应用程序中接受强类型对象。
这是我的 POST 方法签名
我知道 api 并不是真正的 REST 完整版,但它是由外部供应商团队维护的,我对它没有太多控制权。
[HttpPost]
[Route("jobs/isrunning")]
public IHttpActionResult IsJobRunning(JobArguments jobArguments)
{
// some logic
return Ok(true);
}
这是 JobArguments class 的样子
public class JobArguments
{
public JobArguments()
{
TrackingIds = new List<int();
}
public int JobId { get; set; }
public string Code { get; set; }
public List<int> TrackingIds { get; set; }
public string CostCenter { get; set; }
}
这是我在 api 上面调用的 class。假设我无权访问此处的 JobArguments 类型。我所拥有的只是 JobArguments 对象的 JSON 字符串表示形式。
public bool CheckIfJobIsRunning()
{
HttpClient httpClient = new HttpClient("appurl");
httpClient.DefaultRequestHeaders.Accept.Add(new
MediaTypeWithQualityHeaderValue("application/json"));
string jobArguments = @"{ ""JobId"": 10, ""Code"": ""EB430"",
""CostCenter"": ""XYZ"" }"; // assume this is coming from database.
var result = httpClient.PostAsJsonAsync("/jobs/isrunning",
jobArguments).Result;
return Convert.ToBoolean(result);
}
我删除了不必要的代码和错误处理以简化此示例。
执行此 api 调用时,IsJobRunning 方法接收空 jobArguments 参数。
我是初学者,所以不知道我做错了什么。感谢我能得到解决此问题的任何帮助。
更新:更正了 IsJobRunning 方法签名
如果内容已经JSON,只需从数据存储中原样发送即可
例如
static HttpClient httpClient = new HttpClient("appurl");
public async Task<bool> CheckIfJobIsRunning(){
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
var jobArguments = //Assuming the JSON came from database
var content = new StringContent( jobArguments, Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("/jobs/isrunning", content);
var result = await response.Content.ReadAsAsync<bool>();
return result;
}
Web API 操作还应该使用 [FromBody]
属性来告诉服务器上的模型绑定器到哪里寻找数据来绑定参数
[HttpPost]
[Route("jobs/isrunning")]
public IHttpActionResult IsJobRunning([FromBody]JobArguments jobArguments) {
// some logic
return Ok(true);
}
我正在尝试弄清楚如何以字符串格式 POST JSON 到 Web api 2 方法,该方法在 c# 消费应用程序中接受强类型对象。
这是我的 POST 方法签名 我知道 api 并不是真正的 REST 完整版,但它是由外部供应商团队维护的,我对它没有太多控制权。
[HttpPost]
[Route("jobs/isrunning")]
public IHttpActionResult IsJobRunning(JobArguments jobArguments)
{
// some logic
return Ok(true);
}
这是 JobArguments class 的样子
public class JobArguments
{
public JobArguments()
{
TrackingIds = new List<int();
}
public int JobId { get; set; }
public string Code { get; set; }
public List<int> TrackingIds { get; set; }
public string CostCenter { get; set; }
}
这是我在 api 上面调用的 class。假设我无权访问此处的 JobArguments 类型。我所拥有的只是 JobArguments 对象的 JSON 字符串表示形式。
public bool CheckIfJobIsRunning()
{
HttpClient httpClient = new HttpClient("appurl");
httpClient.DefaultRequestHeaders.Accept.Add(new
MediaTypeWithQualityHeaderValue("application/json"));
string jobArguments = @"{ ""JobId"": 10, ""Code"": ""EB430"",
""CostCenter"": ""XYZ"" }"; // assume this is coming from database.
var result = httpClient.PostAsJsonAsync("/jobs/isrunning",
jobArguments).Result;
return Convert.ToBoolean(result);
}
我删除了不必要的代码和错误处理以简化此示例。
执行此 api 调用时,IsJobRunning 方法接收空 jobArguments 参数。
我是初学者,所以不知道我做错了什么。感谢我能得到解决此问题的任何帮助。
更新:更正了 IsJobRunning 方法签名
如果内容已经JSON,只需从数据存储中原样发送即可
例如
static HttpClient httpClient = new HttpClient("appurl");
public async Task<bool> CheckIfJobIsRunning(){
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/json"));
var jobArguments = //Assuming the JSON came from database
var content = new StringContent( jobArguments, Encoding.UTF8, "application/json");
var response = await httpClient.PostAsync("/jobs/isrunning", content);
var result = await response.Content.ReadAsAsync<bool>();
return result;
}
Web API 操作还应该使用 [FromBody]
属性来告诉服务器上的模型绑定器到哪里寻找数据来绑定参数
[HttpPost]
[Route("jobs/isrunning")]
public IHttpActionResult IsJobRunning([FromBody]JobArguments jobArguments) {
// some logic
return Ok(true);
}