programing

컨트롤러 기반 대 컨트롤러 for ASP에서 파생된 이유NET Core 웹 API?

batch 2023. 4. 26. 23:07
반응형

컨트롤러 기반 대 컨트롤러 for ASP에서 파생된 이유NET Core 웹 API?

저는 ASP를 만들기 위해 이 튜토리얼을 따르고 있습니다.NET Core Web API 및 컨트롤러 추가 섹션에서는 컨트롤러의 템플릿 코드를 대체할 코드를 제공합니다.제 눈에 띈 것 중 하나는 템플릿 코드에서 다음과 같은 정보를 얻을 수 있다는 것입니다.

TodoController : Controller

그 대신 사용해야 할 튜토리얼 코드에서 다음을 찾습니다.

[Route("api/[controller]")]
[ApiController]
TodoController : ControllerBase

나는 왜 그것을 이끌어낼 필요가 있는지 매우 흥미롭습니다.ControllerBase대신에Controller웹 API 컨트롤러용입니다.왜 이렇게 된 거지?

에서 파생되는 것이 필요한 이유ControllerBase대신에Controller웹 API 컨트롤러용입니다.

그것은 엄격하게 필요한 것이 아니라 요점만 더 말할 뿐입니다.Controller계급은 에서 유래합니다.ControllerBase보기를 지원하는 데만 필요한 일부 구성원을 추가합니다.

기본적으로:

public abstract class Controller : ControllerBase
{
    public dynamic ViewBag { get; }
    public virtual ViewResult View(object model) { }
    // more View support stuff
}

API를 작성할 때 ControllerBase가 요구 사항과 더 잘 일치하지만 둘 다 작동합니다.

문서에서(광산 강조):

Controller 클래스에서 파생하여 웹 API 컨트롤러를 만들지 마십시오.Controller는 ControllerBase에서 파생되어 보기에 대한 지원을 추가하므로 웹 API 요청이 아닌 웹 페이지를 처리하기 위한 것입니다. 규칙에는 예외가 있습니다. 보기와 웹 API 모두에 동일한 컨트롤러를 사용하려면 컨트롤러에서 이를 파생하십시오.

처음 MVC 반복에는 ControllerBase가 없었던 것으로 기억합니다. 나중에 삽입되었습니다.따라서 약간 이상한 명명/상속 구조입니다.

원본 https://learn.microsoft.com/en-us/aspnet/core/web-api/ ?view=aspnetcore-3.1

Controller 클래스에서 파생하여 웹 API 컨트롤러를 만들지 마십시오.Controller는 ControllerBase에서 파생되어 보기에 대한 지원을 추가하므로 웹 API 요청이 아닌 웹 페이지를 처리하기 위한 것입니다.

컨트롤러 추상 클래스는 뷰를 지원합니다 & & ControllerBase 추상 클래스는 뷰 작성을 지원하지 않습니다.

ControllerBase 추상 클래스

컨트롤러 추상 클래스는 ControllerBase 추상 클래스에서 파생되므로 Create Views, API Not Advantage to Create Views를 지원합니다.

ControllerBase 추상 클래스에 Implementation Like가 없는 멤버[속성, 메서드]가 있습니다.

public abstract class ControllerBase{
        public HttpResponse Response { get; }
        public HttpRequest Request { get; }
        public HttpContext HttpContext { get; }
        public virtual RedirectToActionResult RedirectToAction(string actionName);}

ControllerBase에는 클라이언트 측과 서버 측 간의 모든 요청 및 응답이 있습니다.


컨트롤러 추상 클래스

Controller abstract class 클라이언트 측에서 데이터를 표시하기 위해 뷰를 작성할 수 있으며 ControllerBase abstract class에서 파생됩니다.

public abstract class Controller : ControllerBase{
        public dynamic ViewBag { get; }
        
        public ViewDataDictionary ViewData { get; set; }
       
        public ITempDataDictionary TempData { get; set; }
}

https://newbedev.com/why-derive-from-controllerbase-vs-controller-for-asp-net-core-web-api

또 다른 중요한 차이점은 ControllerBase가 추상 클래스이기 때문에 Dispose 메서드를 구현하지 않는다는 것입니다.그래서 당신은 자신을 감당해야 합니다.SO 항목 보기

컨트롤러를 컨트롤러로 변경하면 아래의 인덱스 메서드에서 "Compiler Error CS0103" 오류가 발생합니다. 현재 컨텍스트에 'identifier'라는 이름이 없습니다.

    public IActionResult Index()
    {
    return View();
    }

언급URL : https://stackoverflow.com/questions/55239380/why-derive-from-controllerbase-vs-controller-for-asp-net-core-web-api

반응형