从 MVC .Net 核心控制器读取 JSON 时出现问题
Posted
技术标签:
【中文标题】从 MVC .Net 核心控制器读取 JSON 时出现问题【英文标题】:Problem Reading JSON from MVC .Net Core Controller 【发布时间】: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();
之后。
另外,能否请您在成功功能中分享您的数据?
如果它有效,你是对的,我将它转换为无意义的字符串。非常感谢您的赞赏。
【参考方案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以上是关于从 MVC .Net 核心控制器读取 JSON 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC 核心 POST 请求未将 JSON 数据转换为模型
现在可以在从 Windows 任务调度程序运行 .net 核心控制台应用程序时读取 appsettings.json 文件中存在的连接字符串
将 JSON 从视图发送到控制器 ASP.NET MVC 会给出空值