다음을 통해 공유


.NET 11의 ASP.NET Core의 새로운 기능

이 문서에서는 관련 설명서에 대한 링크와 함께 .NET 11의 ASP.NET Core에서 가장 중요한 변경 내용을 강조 표시합니다.

이 문서는 새 미리 보기 릴리스를 사용할 수 있게 됨에 따라 업데이트됩니다.

Blazor

이 부분에서는 Blazor의 새로운 기능을 설명합니다.

DisplayName 구성 요소 및 특성에 대한 [Display][DisplayName] 지원

DisplayName 구성 요소를 사용하여 메타데이터 특성의 속성 이름을 표시할 수 있습니다.

[Required, DisplayName("Production Date")]
public DateTime ProductionDate { get; set; }

[Display] 모델 클래스 속성의 특성이 지원됩니다.

[Required, Display(Name = "Production Date")]
public DateTime ProductionDate { get; set; }

두 가지 방법 [Display] 중에서 특성을 권장하므로 추가 속성을 사용할 수 있습니다. 또한 이 [Display] 특성을 사용하면 지역화를 위한 리소스 유형을 할당할 수 있습니다. 두 특성이 모두 있으면 [Display] .보다 우선합니다 [DisplayName]. 두 특성이 모두 없는 경우 구성 요소는 속성 이름으로 돌아갑니다.

DisplayName 레이블 또는 테이블 헤더에서 구성 요소를 사용합니다.

<label>
    <DisplayName For="@(() => Model!.ProductionDate)" />
    <InputDate @bind-Value="Model!.ProductionDate" />
</label>

Blazor 웹 스크립트 시작 옵션 형식이 이제 Blazor Server 및 Blazor WebAssembly 스크립트에 대해 지원됩니다.

스크립트(Blazor Web App) 옵션 개체는 .NET 8 릴리스 이후 다음 형식으로 Blazor.start()에 전달됩니다.

Blazor.start({
  ssr: { ... },
  circuit: { ... },
  webAssembly: { ... },
});

Blazor Server 이제 (blazor.server.js) 및 Blazor WebAssembly (blazor.webassembly.js) 스크립트는 동일한 옵션 형식을 사용할 수 있습니다.

다음 예제에서는 지원되는 이전 옵션 형식을 보여줍니다.

Blazor.start({
  loadBootResource: function (...) {
      ...
    },
  });

이전 예제에 대해 새로 지원되는 옵션 형식은 다음과 같습니다.

Blazor.start({
  webAssembly: {
    loadBootResource: function (...) {
      ...
    },
  },
});

자세한 내용은 ASP.NET Core Blazor 시작을 참조하세요.

BasePath 구성 요소

Blazor Web Apps는 새 BasePath 구성 요소(<BasePath />)를 사용하여 앱의 앱 기본 경로(<base href>) HTML 태그를 자동으로 렌더링할 수 있습니다. 자세한 내용은 ASP.NET Core Blazor 앱 기본 경로를 참조하세요.

구성 요소의 인라인 JS 이벤트 처리기가 제거되었습니다.

탐색 링크의 표시를 토글하는 인라인 JS 이벤트 처리기는 프로젝트 템플릿의 구성 요소에 NavMenuBlazor Web App 더 이상 존재하지 않습니다. 이제 프로젝트 템플릿에서 생성된 앱은 정렬된 JS 모듈 접근 방식을 사용하여 렌더링된 페이지에서 탐색 모음을 표시하거나 숨깁니다. 새로운 접근 방식은 CSP가 인라인에 안전하지 않은 해시를 포함할 필요가 없으므로 CSPJS를 개선합니다.

탐색 모음 토글러에 대한 새 JS 모듈 접근 방식을 채택하는 것을 포함하여 기존 앱을 .NET 11로 마이그레이션하려면 .NET 10의 ASP.NET Core에서 .NET 11의 ASP.NET Core로 마이그레이션을 참조하세요.

RelativeToCurrentUri 매개 변수(기본값: false)와 NavigationManager.NavigateToNavLink 구성 요소를 사용하면 앱의 기본 URI가 아닌 현재 페이지 경로를 기준으로 URI로 이동할 수 있습니다.

다음 중첩된 엔드포인트를 고려합니다.

  • /docs
    • /getting-started
      • /installation
      • /configuration

브라우저의 URI가 /docs/getting-started/installation로 설정되어 있을 때 사용자를 /docs/getting-started/configuration로 이동시키려 하면, NavigateTo("/configuration")/configuration/docs/getting-started/configuration의 상대 경로가 아닌 앱의 루트 경로로 리디렉션합니다. 원하는 탐색을 위해 또는 구성 요소를 설정하십시오.

Navigation.NavigateTo("/configuration", new NavigationOptions
{
    RelativeToCurrentUri = true
});
<NavLink href="configuration" RelativeToCurrentUri="true">Configuration</NavLink>

Blazor Hybrid

이 부분에서는 Blazor Hybrid의 새로운 기능을 설명합니다.

미리 보기 기능을 사용할 수 있게 되면 릴리스 정보가 이 섹션에 표시됩니다.

SignalR

이 부분에서는 SignalR의 새로운 기능을 설명합니다.

최소 API

이 섹션에서는 최소 API에 대한 새로운 기능에 대해 설명합니다.

OpenAPI

이 섹션에서는 OpenAPI의 새로운 기능에 대해 설명합니다.

이진 파일 응답 설명

ASP.NET Core 11에서는 이진 파일 응답을 반환하는 작업에 대한 OpenAPI 설명 생성을 지원합니다. 이 기능은 FileContentResult 결과 형식을 type: stringformat: binary와 함께 사용하여 OpenAPI 스키마에 매핑합니다.

확장 메서드 Produces<T>TFileContentResult 사용하여 응답 형식 및 콘텐츠 형식을 지정합니다.

app.MapPost("/filecontentresult", () =>
{
    var content = "This endpoint returns a FileContentResult!"u8.ToArray();
    return TypedResults.File(content);
})
.Produces<FileContentResult>(contentType: MediaTypeNames.Application.Octet);

생성된 OpenAPI 문서에서는 엔드포인트 응답을 다음과 같이 설명합니다.

responses:
  '200':
    description: OK
    content:
      application/octet-stream:
        schema:
          $ref: '#/components/schemas/FileContentResult'

다음과 FileContentResult 같이 정의됩니다.components/schemas

components:
  schemas:
    FileContentResult:
      type: string
      format: binary

인증 및 권한 부여

이 섹션에서는 인증 및 권한 부여를 위한 새로운 기능에 대해 설명합니다.

TimeProvider ASP.NET Core의 지원 Identity

이제 ASP.NET Core는 모든 시간 관련 작업에서 DateTimeDateTimeOffset 대신 IdentityTimeProvider를 사용합니다. 이러한 변경으로 Identity 인해 구성 요소가 테스트하기 쉬워지고 테스트 및 특수화된 시나리오에서 시간이 지남에 따라 더 효율적으로 제어할 수 있습니다.

다음 예제에서는 테스트 TimeProvider 기능에 Fake Identity 를 사용하는 방법을 보여 있습니다.

// In tests
var fakeTimeProvider = new FakeTimeProvider(
    new DateTimeOffset(2024, 1, 1, 0, 0, 0, TimeSpan.Zero));

services.AddSingleton<TimeProvider>(fakeTimeProvider);
services.AddIdentity<IdentityUser, IdentityRole>();

// Identity will now use the fake time provider

이를 사용하면 TimeProvider토큰 만료, 잠금 기간 및 보안 스탬프 유효성 검사와 같은 시간에 민감한 Identity 기능에 대한 결정적 테스트를 보다 쉽게 작성할 수 있습니다.

기타

이 섹션에서는 .NET 11의 기타 새 기능에 대해 설명합니다.

IOutputCachePolicyProvider 인터페이스

.NET 11의 ASP.NET Core는 사용자 지정 출력 캐싱 정책 선택 논리를 구현하기 위한 [IOutputCachePolicyProvider](https://source.dot.net/#Microsoft.AspNetCore.OutputCaching/[IOutputCachePolicyProvider.cs](https://source.dot.net/#Microsoft.AspNetCore.OutputCaching/IOutputCachePolicyProvider.cs)' 인터페이스를 제공합니다. 앱은 이 인터페이스를 사용하여 기본 기본 캐싱 정책을 결정하고, 명명된 정책의 존재를 확인하고, 정책을 동적으로 해결해야 하는 고급 시나리오를 지원할 수 있습니다. 예를 들어 외부 구성 원본, 데이터베이스에서 정책을 로드하거나 테넌트별 캐싱 규칙을 적용하는 것이 있습니다.

다음 코드는 IOutputCachePolicyProvider 인터페이스가 어떻게 구성되는지를 보여줍니다.

public interface IOutputCachePolicyProvider
{
    IReadOnlyList<IOutputCachePolicy> GetBasePolicies();
    ValueTask<IOutputCachePolicy?> GetPolicyAsync(string policyName);
}

이 기여에 @lqlive 감사합니다!

WSL의 신뢰할 수 있는 개발 인증서 자동 생성

이제 개발 인증서 설정은 WSL(Linux용 Windows 하위 시스템) 환경에서 인증서를 자동으로 신뢰합니다. WSL에서 실행 dotnet dev-certs https --trust 하면 인증서가 WSL 환경과 Windows 모두에서 자동으로 설치되고 신뢰할 수 있으므로 수동 신뢰 구성이 제거됩니다.

# Automatically trusts certificates in both WSL and Windows
dotnet dev-certs https --trust

이 향상된 기능은 WSL을 사용할 때 개발 환경을 간소화하여 Windows의 Linux 환경에서 작업하는 개발자에게 공통적인 마찰점을 제거합니다.

이 기여에 @StickFun 감사합니다!