如何使用 json 从 web.api 获取返回值到 mvc 控制器?

Posted

技术标签:

【中文标题】如何使用 json 从 web.api 获取返回值到 mvc 控制器?【英文标题】:How can i get returned Value from web.api to mvc controller with json? 【发布时间】:2017-04-13 22:22:50 【问题描述】:

来自 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);          

【问题讨论】:

同一个网站还是不同的网站? 【参考方案1】:

您必须修改发布和阅读回复的方式。

修改后调用自

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;
        
    

更多详情请参考这篇帖子Get response from PostAsJsonAsync和HttpClient.GetAsync(...) never returns when using await/async。

【讨论】:

以上是关于如何使用 json 从 web.api 获取返回值到 mvc 控制器?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Web API 获取十进制值 .00

如何在android中使用OkHttp从web api获取json数据到RecyclerView

如何在不知道匹配返回的 json 数据中的所有值的情况下从 .Net 核心中的 Web api 调用创建模型?

如何从 Angular 7 调用 Web API 返回布尔值?

管理从 web api 以 json 格式返回的属性名称

通过 IOS 从 ASP.NET Web API 获取布尔值或字符串