본문 바로가기
ASP.NET Core

ASP.NET MVC vs ASP.NET Core] middleware, module, handler, configuration 차이

by Fastlane 2023. 2. 8.
728x90
반응형

middleware, module, handler

  • ASP.NET MVC

HTTP 모듈 및 handler는 ASP.NET architecture의 필수부분이다. 

  • ASP.NET Core

Request pipeline을 구성한다. 

 

HttpContext 액세스 

HttpContext.Current 정적 호출을 사용하는 대신, Middleware의 메서드에 매게변수로 제공하고, 서비스에는 IHttpContextAccessor를 사용한다. 

728x90

configuration

ASP.NET과 ASP.NET Core 사이에 configureation 값을 저장하고 읽는 방법이 크게 변경되었다. 

  • ASP.NET MVC

web.config파일을 사용한다. 대부분의 app은 appSettings, connectionStrings element에 설정값을 저장한다. 설정값은 System.Configuration.ConfigurationManager class를 사용해서 접근한다. 따라서 대부분의 app들은 setting값에 직접 접근한다. 

string connectionString =
 ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString;
  • ASP.NET Core

대부분의 앱들은 템플릿에서 제공하는 파일을 사용한다. 기본세팅은 appsettings.json, appsettings.Development.json과 같은 JSON 포맷 파일을 사용한다. 기본 구성 시스템은 동일한 이름의 환경설정값으로 모든 파일기본 세팅값을 override할 수 있다. 따라서 배포 시, 실수로 중요한 prodiction 구성세팅값을 덮어쓸 걱정이 없다. 

configuration값 접근은 여러가지 방법이 있다. .NET Core에 내장된 DI 때문에, 보통 interface를 통해 class에 주입되어 사용한다. IConfiguration interface를 전달할 수 있지만, 일반적으로 options pattern을 사용하여 필요한 설정만 세팅을 전달하는 것이 좋다. 

//Razor 페이지로 IConfiguration 전달하고 구성 설정에 접근
using Microsoft.Extensions.Configuration;

public class TestModel : PageModel
{
    private readonly IConfiguration _configuration;

    public TestModel(IConfiguration configuration)
    {
        _configuration= configuration;
    }

    public ContentResult OnGet()
    {
        var myKeyValue = _configuration["MyKey"];

        // ...
    }
}
// 옵션 패턴을 사용하여 접근, 필요한 설정을 구체적으로 입력
public class PositionOptions
{
    public const string Position = nameof(Position);

    public string Title { get; set; }
    public string Name { get; set; }
}
public class Test2Model : PageModel
{
    private readonly PositionOptions _options;

    public Test2Model(IOptions<PositionOptions> options)
    {
        _options = options.Value;
    }

    public ContentResult OnGet()
    {
        return Content($"Title: {_options.Title}\nName: {_options.Name}");
    }
}

Program.cs파일에 옵션 유형을 구성해야 한다. 

// required in ConfigureServices
services.Configure<PositionOptions>(Configuration.GetSection(PositionOptions.Position));

 

728x90
반응형

댓글