在页面控制器中使用API​​控制器

我正在开始学习 asp.net core,并且在理解一些基本模式方面遇到问题。我可以在 PageController 中使用 ApiController 吗?


例如


//Home controller

public async Task<IActionResult> Index()

{

    var artists = await _artistController.GetAll();


    var t = artists.GetValue();


    var indexModel = new Models.Pages.IndexModel

    {

        Artists = artists.GetValue() //Extension method

    };

    return View(indexModel);

}

//ArtistRestController

[HttpGet]

public async Task<ActionResult<IEnumerable<Artist>>> GetAll()

{

    try

    {

        return Ok(await _repository.GetAll());

    }

    catch (Exception ex)

    {

        _logger.LogError(ex.Message);

        return BadRequest(ex.Message);

    }

}

它可以工作,但是设计上可以吗?也许我应该直接调用_repository.GetAll()而不使用其他控制器?


MMMHUHU
浏览 54回答 1
1回答

12345678_0001

首先,您应该避免在一个控制器中使用另一个控制器。对于Controller来说,它用于处理来自客户端的http请求。即使它是一个类,但将其用作一个类是不合理的。其次,组合起来ApiController会使PageController你的应用程序不稳定并且耦合性太强。如果您稍后更改任何内容ArtistRestController.GetAll都会HomeController损坏。而且,对于您当前的代码,如果 中存在一些异常PageController,您的ApiController代码将会失败。您应该注入repository来查询数据。
打开App,查看更多内容
随时随地看视频慕课网APP