2016-11-29 74 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的更多細節。