【问题标题】:Problem Reading JSON from MVC .Net Core Controller从 MVC .Net 核心控制器读取 JSON 时出现问题
【发布时间】:2021-11-06 15:10:35
【问题描述】:

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

我会从控制器以 String 形式返回结果吗?它实际上应该以 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");
    },
});

}

【问题讨论】:

  • 嗨@Daniel Lazarte,你为什么要反序列化json并将反序列化的模型解析为字符串?为什么不直接使用apiResponse?您还需要首先检查成功功能中的data是什么。
  • @Rena 你好,那么正确的方法是什么?是,如果我不返回字符串,它永远不会发生 Return
  • 嗨@Daniel Lazarte,只需return Ok(apiResponse); 并将其移到using 中的string apiResponse = await response.Content.ReadAsStringAsync(); 之后。
  • 另外,能否请您在成功功能中分享您的数据?
  • 如果它有效,你是对的,我将它转换为无意义的字符串。非常感谢您的赞赏。

标签: javascript jquery json asp.net-mvc asp.net-core


【解决方案1】:

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

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

【讨论】:

  • 优秀。 ahora si funciona。 Muchas Gracias =) @Rena
  • 嗨@DanielLazarte,如果我的回答帮助您解决了您的问题,您能接受吗?请参阅:How to accept as answer。谢谢。
  • 如果重生,能否给我解释一下,我在哪一部分接受它作为最终答案?
  • 嗨@DanielLazarte,您可以参考此链接以了解如何接受答案:meta.stackexchange.com/a/5235/673311
猜你喜欢
  • 2021-08-18
  • 2021-11-20
  • 1970-01-01
  • 2018-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多