【问题标题】:How to return a view using ASP.NET Core API controller如何使用 ASP.NET Core API 控制器返回视图
【发布时间】:2020-01-13 17:10:05
【问题描述】:

我正在使用 ASP.NET 核心,我读过它已将控制器和 API 合并为一个。我已经成功地让 JSON 数据工作,但是,视图不起作用。它只是说找不到该页面。我可以查看主页,但是,这是作为 MVC 控制器而不是作为 API 控制器创建的。

namespace ScheduleWebApp.Controllers
{
    [Route("api/[controller]")]
    [ApiController]
    public class StaffHoursWorkedController : Controller
    {
        public IActionResult Index()
        {
            return View();
        }
    }
}

【问题讨论】:

  • 你为什么要这样做? API 控制器并不意味着返回视图。如果要返回视图,请使用常规控制器
  • 我认为 MVC 控制器和 Web API 已在 .netcore 中合并在一起。我假设您现在可以从同一个控制器获取视图和数据,而不是像在 .net 框架中那样拥有单独的控制器和单独的 Web API。
  • 是的,它们现在都继承自同一个 ControllerBase 类,但是控制器类的行为会根据 [ApiController] 属性的存在而有所不同。这意味着您不必在项目中导入和配置两个单独的控制器类型。如果你想混合控制器动作类型,你需要删除[ApiController] 属性,但是你会失去一些额外的api功能,比如自动内容协商。最好不要将两者混合在同一个控制器中,因为这往往会违反关注点分离。
  • 找不到页面是什么意思?与我们分享您的请求和结果的屏幕截图。

标签: asp.net-core model-view-controller view


【解决方案1】:

对于 MVC 控制器,它的基类是 Controller,它是支持视图的 MVC 控制器的基类。

对于 API 控制器,它的基类是 ControllerBase,它是不支持视图的 MVC 控制器的基类。

按照以下步骤操作:

  1. 控制器
[Route("api/[controller]/[action]")]
[ApiController]
public class ValuesController : Controller //ControllerBase
{
    private readonly ILogger<ValuesController> _logger;
    public ValuesController(ILogger<ValuesController> logger)
    {
        _logger = logger;
    }
    
    [HttpGet]
    public IActionResult Index()
    {
        return View();
    }        
}
  1. 右键View() -> 添加视图

  2. 使用https://localhost:5001/api/values/index访问Index页面

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 2016-03-23
    • 2021-08-29
    相关资源
    最近更新 更多