首页 > 解决方案 > 从 MVC .Net 核心控制器读取 JSON 时出现问题

问题描述

我在 ASP.Net Core 5 中有一个 Web 应用程序,它也参考了 .Net 核心中的 Web API。它以 JSON 格式返回的内容必须从名为landing.js 的文件中读取。问题是数据到达变量(数据)但我无法访问它的方法,它总是设计未定义

我会从控制器返回字符串中的结果吗?它实际上应该以 JSON 格式到达 JS。

我的控制器:

public async Task<IActionResult> GetPodcastLandingPortada()
    {
        List<PPodcast> ppodcastPortada = new List<PPodcast>();
        string jsonresultado = "";

        using (var httpClient = new HttpClient())
        {
            using (var response = await httpClient.GetAsync("https://localhost:44379/api/Podcast/ObtenerPodcastPortadaPrincipal"))
            {
                string apiResponse = await response.Content.ReadAsStringAsync();
                //ppodcastPortada = JsonConvert.DeserializeObject<List<PPodcast>>(apiResponse);
                jsonresultado = JsonConvert.DeserializeObject(apiResponse).ToString();
            }
        }
        return Ok(jsonresultado);

    }

我的文件landing.js

   window.onload = function () {
_getPortadaPrincipal();

} 函数 _getPortadaPrincipal() {

let ruta = '/podcast/GetPodcastLandingPortada';
$.ajax({
    type: 'GET',
    url: ruta,
    contentType: JSON,
    processData: false,
    success: function (data) {
        console.log(data.titulo); //this is where it returns undefinned, but the data variable is loaded


        $("#portadaPrincipal").html(row);
        console.log(data);

    },
    error: function () {
        alert("Error en la carga de la Portada");
    },
});

}

标签: javascriptjqueryjsonasp.net-mvcasp.net-core

解决方案


首先,你做了一个重复的事情来返回一个 json。因此,您只需return Ok(apiResponse);将其移动string apiResponse = await response.Content.ReadAsStringAsync();using

using (var response = await httpClient.GetAsync("https://localhost:44379/api/Podcast/ObtenerPodcastPortadaPrincipal"))
{
     string apiResponse = await response.Content.ReadAsStringAsync();
     return Ok(apiResponse);
}

其次,如果要获取json中的item值,还需要将json转换为js中的object。

因此,获取项目响应的正确方法应如下所示:

public async Task<IActionResult> GetPodcastLandingPortada()
{
    using (var httpClient = new HttpClient())
    {
        using (var response = await httpClient.GetAsync("url"))
        {
            string apiResponse = await response.Content.ReadAsStringAsync();
            var model = JsonConvert.DeserializeObject<List<PPodcast>(apiResponse);
            return Ok(model);
        }
    }
}

然后你可以得到项目:

console.log(data[0].xxx);  //because what you return is an array

推荐阅读