[英]How can i get returned Value from web.api to mvc controller with json?
如何使用json將web.api中的返回值獲取到mvc控制器?
來自mvc控制器的代碼:
try
{
HttpClient cl = new HttpClient();
cl.BaseAddress = new Uri("http://localhost:35936");
cl.DefaultRequestHeaders.Add("ApiUser", "User");
cl.DefaultRequestHeaders.Add("Password", "Password");
cl.DefaultRequestHeaders.Add("MyVar", "1234");
cl.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
string json = JsonConvert.SerializeObject(testedVar);
var sucSender = await cl.PostAsJsonAsync("api/sender/successtested", json);
if (sucSender.IsSuccessStatusCode)
{
var newvar = JsonConvert.DeserializeObject<Tested>(sucSender.ToString());
}
}
來自Web.Api的代碼:
string forReturn = "222444";
Tested forRetVar = new Tested
{
test = forReturn
};
var test123 = JsonConvert.SerializeObject(forRetVar);
return JsonConvert.SerializeObject(forRetVar);
您必須修改發布和閱讀響應的方式。
修改來自的帖子
var sucSender = await cl.PostAsJsonAsync("api/sender/successtested", json);
至
var sucSender = await cl.PostAsJsonAsync("api/sender/successtested", json).ConfigureAwait(false);
並從中修改響應讀取調用
var newvar = JsonConvert.DeserializeObject<Tested>(sucSender.ToString());
至
var newvar = await sucSender.Content.ReadAsAsync<Tested>();
這是基於我自己的測試樣本的完整代碼。 我有一個托管在http:// localhost / MyTestTwo的test2 api控制器,它使用HttpClient內部調用了托管在http:// localhost / MyTestApi的另一個api。 為簡單起見,我使Test2Controller的Get方法保持同步,而不是將其轉換為異步等待模式。 這兩個webapi應用程序都在IIS中使用匿名身份驗證進行了配置。
using System;
using System.Collections.Generic;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Threading.Tasks;
using System.Web.Http;
namespace MyTestTwo.Controllers
{
public class Test2Controller : ApiController
{
public IHttpActionResult Get()
{
var employeesTask = GetEmp();
employeesTask.Wait();
var employees = employeesTask.Result;
return Ok(employees);
}
private async Task<IEnumerable<string>> GetEmp()
{
IEnumerable<string> response = new List<string>();
var cl = new HttpClient();
cl.BaseAddress = new Uri("http://localhost/MyTestApp/");
cl.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
var sucSender = await cl.PostAsJsonAsync("api/MyTest", "test").ConfigureAwait(false);
if (sucSender.IsSuccessStatusCode)
{
response = await sucSender.Content.ReadAsAsync<IEnumerable<string>>();
}
return response;
}
}
}
請參考這篇文章獲取來自PostAsJsonAsync和HttpClient的 響應。GetAsync (...)在使用await / async時永遠不會返回以獲取更多詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.