【问题标题】:How to consume ASP.NET Core WebAPI using MVC Razor view如何使用 MVC Razor 视图使用 ASP.NET Core WebAPI
【发布时间】:2022-02-11 03:12:29
【问题描述】:

我正在尝试使用带有 Razor 视图的 ASP.NET Core Web API 和 MVC 构建一个 Web 应用程序。

这是我的TopicController 代码:

  public async Task'<'IResult'>' Index()
  {
      return Results.Ok(await _Data.GetAllTopics());
  }

这个控制器的输出是:

{ 
    "value": [
                 { 
                   "id": 1,
                   "topicName": "ACCESS MODIFIER",
                   "videoName": null,
                   "videoURL":null
                 },
                 {
                   "id": 2,
                   "topicName": "GENERICS",
                   "videoName": null,
                   "videoURL": null
                 }
             ],
    "statusCode": 200,
    "contentType": null
}

如果复杂对象的Index() 的返回类型是IActionResult,我可以显示数据。但不确定如何解释上述Index() 函数的结果。

我是前端新手,如有任何帮助,将不胜感激。

【问题讨论】:

标签: c# asp.net-core asp.net-core-webapi


【解决方案1】:

首先从代码中删除Results.Ok,因为这会返回 JSON。将action方法的返回类型改为ActionResult,一定要返回View,然后构建Razor页面。

【讨论】:

  • 你是对的,代码返回 JSON,这就是我试图通过 Razor 视图使用的内容,但不知道该怎么做。我试图避免更改我的控制器,否则我将不得不重写整个 WebAPI 逻辑。
  • 如果您需要使用 JSON,那么您需要在页面上从 JS 进行 Ajax 调用。
【解决方案2】:

我能够使我的代码工作。我没有返回 JSON,而是重新调整视图。但是我必须对对象进行本地映射。

public async Task<IActionResult> Index()
{

List<Models.Topic> topics = new List<Models.Topic>();

  var result = await _Data.GetAllTopics();

foreach (var item in result)
{
  topics.Add(new Models.Topic
  {
    Id = item.Id,
    TopicName = item.TopicName,
    VideoName= item.VideoName,
    VideoURL = item.VideoURL
  });
}

return View(topics);
}

【讨论】:

    猜你喜欢
    • 2023-01-03
    • 2019-11-02
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 2014-04-04
    • 2023-02-23
    • 2011-09-02
    相关资源
    最近更新 更多