2016-11-29 73 views
0

我怎样才能返回值从web.api MVC控制器与JSON?从MVC控制器如何从web.api返回值与json的mvc控制器?

代码:

从Web.Api
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());     
    } 
} 

代码:

string forReturn = "222444"; 
Tested forRetVar = new Tested 
{ 
    test = forReturn 
}; 
var test123 = JsonConvert.SerializeObject(forRetVar); 
return JsonConvert.SerializeObject(forRetVar);   
+0

相同网站或其他网站? –

回答

0

你必须修改你是如何发布和阅读的响应。

修改从

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>(); 

这里是完整的代码基于我自己的测试样本。我有一个test2 api控制器托管在http://localhost/MyTestTwo内部使用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; 
     } 
    } 
} 

请参阅这篇Get response from PostAsJsonAsyncHttpClient.GetAsync(...) never returns when using await/async的更多细节。