无法从react.js响应中的asp.net核心控制器端点获取响应

时间:2019-05-29 12:32:20

标签: reactjs asp.net-core

我是ASP.NET Core和React js的新手。 我无法从ASP.NET控制器端点获取React中的响应。后端的所有代码都从开始到返回响应行执行,并在返回行获取数据,但是在react js的响应中,我看不到数据。

我尝试过:

  public void ConfigureServices(IServiceCollection services)
        {

            services.AddMvc(options =>
            {
                options.InputFormatters.Add(new BypassFormDataInputFormatter());
                options.RespectBrowserAcceptHeader = true;
                options.InputFormatters.Add(new BypassFormDataInputFormatter());
                options.OutputFormatters.Add(new XmlSerializerOutputFormatter());
      }).AddXmlSerializerFormatters().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

这是我的前端:

getRecordsByPaging = (pagingData) => {
    debugger
    var jsonData = JSON.stringify(pagingData);
    return fetch('/get-products', {
        method: 'POST',
        body: jsonData,
        headers: {
            'Content-Type': 'application/json',
            'Accept': 'application/json'
        }
    }).then(res => {
        return res;
    }).catch(err => err);
}

这是我的后端:

    [HttpPost]
    [Route("get-products")]
    public async Task<IActionResult> GetCustomers([FromBody] req)
    {
        try
        {
            if (!ModelState.IsValid)
            {
                return null;
            }
            var response = await _productSvc.GetProducts(req);
            if (response == null)
            {
                return null;
            }

            return Ok(response);

        }
        catch (Exception e)
        {
            return null;
        }


    }

我不知道怎么了。

我正在反应js方面:

body: (...)
bodyUsed: false
headers: Headers {}
ok: true
redirected: false
status: 200
statusText: ""
type: "basic"
url: "https://localhost:44384/get-products"
__proto__: Response

1 个答案:

答案 0 :(得分:0)

您需要阅读ajax请求的实际响应:

getRecordsByPaging = (pagingData) => {
    var jsonData = JSON.stringify(pagingData);
    return fetch('/get-products', {
        method: 'POST',
        body: jsonData,
        headers: {
            'Content-Type': 'application/json',
            'Accept': 'application/json'
        }
    })
    .then(r => r.json())
    .then(res => {
        return res;
    }).catch(err => err);
}

如您所见,添加的行是.then(r => r.json()),它将实际上从您的请求中获取JSON响应。

您可以在https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetch上了解有关fetch api的更多信息

基本提取:

  

基本提取请求的设置非常简单。看看   以下代码:

fetch('http://example.com/movies.json')
  .then(function(response) {
    return response.json();
  })
  .then(function(myJson) {
    console.log(JSON.stringify(myJson));
  });
  

在这里,我们正在通过网络获取JSON文件并将其打印到   控制台。 fetch()的最简单用法是使用一个参数-路径   到您要获取的资源—并返回包含   响应(响应对象)。

     

这当然只是HTTP响应,而不是实际的JSON。至   从响应中提取JSON正文内容,我们使用json()   方法(在Body mixin上定义,由   请求和响应对象。)